From 7b40706aedd94d61ae158a57354c68089d88a55d Mon Sep 17 00:00:00 2001 From: Matthew Fu Date: Thu, 5 Jan 2012 16:20:51 +0800 Subject: [PATCH] fixing for app_auth --- app/controllers/admin/app_auths_controller.rb | 2 +- app/controllers/application_controller.rb | 7 + app/models/app_auth.rb | 71 ++++-- app/models/module_app.rb | 4 + app/models/user/user.rb | 5 +- app/views/admin/designs/_form.html.erb | 2 +- app/views/admin/designs/_new.html.erb | 2 +- spec/models/app_auth_basic.rb | 241 ++++++++++++------ vendor/built_in_modules/NewBlog/NewBlog.json | 3 +- 9 files changed, 225 insertions(+), 112 deletions(-) diff --git a/app/controllers/admin/app_auths_controller.rb b/app/controllers/admin/app_auths_controller.rb index 6f3f1c3d..f2c01451 100644 --- a/app/controllers/admin/app_auths_controller.rb +++ b/app/controllers/admin/app_auths_controller.rb @@ -4,7 +4,7 @@ class Admin::AppAuthsController < ApplicationController before_filter :is_admin? def index - @user_roles = UserRole.all.entries + @roles = Role.all.entries apps = Purchase.where(:type =>"App") @app_auth_data = apps.entries.map do |app| app_c = eval(app.app_controller) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d9c0156c..7c964ff5 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,6 +5,13 @@ class ApplicationController < ActionController::Base helper :all before_filter :set_locale, :set_site + + def front_end_available(module_app_title='') + app_controller = ModuleApp.first(conditions: {:title => module_app_title} ) + unless app_controller.enable_frontend? + render :text => 'View not available' + end + end def get_all_app_engines ary = ["vender/plugins/NewBlog"] diff --git a/app/models/app_auth.rb b/app/models/app_auth.rb index 9602fda0..b31add3c 100644 --- a/app/models/app_auth.rb +++ b/app/models/app_auth.rb @@ -15,55 +15,72 @@ class AppAuth has_and_belongs_to_many :roles + has_and_belongs_to_many :sub_roles + + attr_protected :roles,:sub_roles,:privilege_users,:blocked_users,:users + + def add_role role + add_operation(:roles,role) + end + + def add_sub_role role + add_operation(:sub_roles,role) + end + + def remove_role role + remove_operation(:roles,role) + end + + def remove_sub_role role + remove_operation(:sub_roles,role) + end def add_user_to_black_list user - unless self.blocked_users.include?(user) - self.blocked_users << user - self.save! - else - false #should put error message for user existed in list already - end + add_operation(:blocked_users,user) end - def remove_user_from_black_list user - if self.blocked_users.include? user - self.blocked_users.delete user + remove_operation(:blocked_users,user) + end + + def add_user_to_privilege_list user + add_operation(:privilege_users,user) + end + + def remove_user_from_privilege_list user + remove_operation(:privilege_users,user) + end + + def remove_operation(item,obj) + if (self.send item).include? obj + (self.send item).delete obj self.save! else false #should put error message for user not existed in list - end + end end - - def add_user_to_privilege_list user - unless self.privilege_users.include? user - self.privilege_users << user + def add_operation(item,obj) + unless (self.send item).include?(obj) + (self.send item) << obj self.save! else false #should put error message for user existed in list already end end - - def remove_user_from_privilege_list user - if self.privilege_users.include? user - self.privilege_users.delete user - self.save! - else - false #should put error message for user not existed in list - end - end - def auth_users if self.all? User.all.entries else - ary= self.roles.collect do |role| - role.users + ary=[] + [:roles,:sub_roles].each do |t_role| + ary += (self.send t_role).collect do |role| + role.users + end end ary << self.privilege_users - ary.flatten! + ary.flatten!.uniq end end diff --git a/app/models/module_app.rb b/app/models/module_app.rb index 31a02025..18e8a6d7 100644 --- a/app/models/module_app.rb +++ b/app/models/module_app.rb @@ -9,9 +9,13 @@ class ModuleApp field :intro field :update_info field :create_date + field :enable_frontend,type: Boolean field :app_pages ,type: Array + field :widgets ,type: Array has_one :app_auth,dependent: :delete + + end diff --git a/app/models/user/user.rb b/app/models/user/user.rb index 1e956b80..60199ce7 100644 --- a/app/models/user/user.rb +++ b/app/models/user/user.rb @@ -19,7 +19,10 @@ class User accepts_nested_attributes_for :attribute_values, :allow_destroy => true def avb_apps - query = AppAuth.any_of({all: true},{privilege_user_ids: self.id},{roles: self.role.id}).excludes(blocked_user_ids: self.id) + sub_role_ids_ary=self.sub_roles.collect{|t| t.id} + query1 = AppAuth.any_in({sub_role_ids: sub_role_ids_ary}).excludes(blocked_user_ids: self.id) + query2 = AppAuth.any_of({all: true},{privilege_user_ids: self.id},{role_ids: self.role.id}).excludes(blocked_user_ids: self.id) + (query1 + query2).uniq end def name diff --git a/app/views/admin/designs/_form.html.erb b/app/views/admin/designs/_form.html.erb index b6ba7cb2..fd579e5e 100644 --- a/app/views/admin/designs/_form.html.erb +++ b/app/views/admin/designs/_form.html.erb @@ -38,7 +38,7 @@ <%= f.hidden_field :to_save, :value => true %> <% end %> <% else %> - <%= File.basename (@design.default_css.file.url) %> + <%= File.basename (@design.default_css.file.url) rescue "" %> <% end %>

diff --git a/app/views/admin/designs/_new.html.erb b/app/views/admin/designs/_new.html.erb index ded2237a..a4aba6c9 100644 --- a/app/views/admin/designs/_new.html.erb +++ b/app/views/admin/designs/_new.html.erb @@ -1,6 +1,6 @@

<%= t('admin.new_design') %>

-<%= form_for :design, :url => admin_designs_path do |f| %> +<%= form_for @design, :url => admin_design_path(@design),:html => {:multipart => true} do |f| %> <%= f.error_messages %> <%= render :partial => "form", :locals => { :f => f } %> diff --git a/spec/models/app_auth_basic.rb b/spec/models/app_auth_basic.rb index 3a2ae0f2..0f629119 100644 --- a/spec/models/app_auth_basic.rb +++ b/spec/models/app_auth_basic.rb @@ -6,129 +6,210 @@ describe AppAuth do before do User.all.destroy - UserRole.all.destroy + Role.all.destroy + SubRole.all.destroy AppAuth.all.destroy ModuleApp.all.destroy #Create some fixtures of Main Role main_role_key = ["Stud","Teacher","Staff"] @new_main_role_list = main_role_key.each do |role| - new_role = UserRole.new :key => role - + new_role = Role.new :key => role new_role.save end + #Create Some SubRoles + sub_role_key = ["graduated_school","undergraduated_school","TA","Senior"] + @new_main_role_list = sub_role_key.each do |role| + new_role = SubRole.new :key => role + new_role.save + end + #Create some users of User - user_emails = ["a_good_stud","a_bad_stud","a_teacher","a_staff"] + user_emails = ["a_good_ug_stud_1","a_good_ug_stud_2","a_bad_ug_stud","a_good_g_stud","a_bad_g_stud","a_teacher","a_staff"] user_emails.each do |user_email| email=user_email+"@rulingcom.com" new_user = User.new :email=> email new_user.save end - - @stud_MRK = UserRole.first(conditions:{key:"Stud"}) - @teacher_MRK = UserRole.first(conditions:{key:"Teacher"}) - @staff_MRK = UserRole.first(conditions:{key:"Staff"}) - - @good_stu = User.first(conditions:{email:"a_good_stud@rulingcom.com"}) - @bad_stu = User.first(conditions:{email:"a_bad_stud@rulingcom.com"}) + #MRK = Member Role Key SRK=Sub Role Key + @stud_MRK = Role.first(conditions:{key:"Stud"}) + @teacher_MRK = Role.first(conditions:{key:"Teacher"}) + @staff_MRK = Role.first(conditions:{key:"Staff"}) + + @graduated_SRK = SubRole.first(conditions:{key:"graduated_school"}) + @under_graduated_SRK = SubRole.first(conditions:{key:"undergraduated_school"}) + @ta_SRK = SubRole.first(conditions:{key:"TA"}) + @senior_SRK = SubRole.first(conditions:{key:"Senior"}) + + @stud_MRK.sub_roles += [@graduated,@under_graduated,@ta] + @stud_MRK.save! + + @teacher_MRK.sub_roles = [@senior] + @teacher_MRK.save! + + @good_ug_stu_1 = User.first(conditions:{email:"a_good_ug_stud_1@rulingcom.com"}) + @good_ug_stu_2 = User.first(conditions:{email:"a_good_ug_stud_2@rulingcom.com"}) + @bad_ug_stu = User.first(conditions:{email:"a_bad_ug_stud@rulingcom.com"}) + + @good_g_stu = User.first(conditions:{email:"a_good_g_stud@rulingcom.com"}) + @bad_g_stu = User.first(conditions:{email:"a_bad_g_stud@rulingcom.com"}) @teacher = User.first(conditions:{email:"a_teacher@rulingcom.com"}) @staff = User.first(conditions:{email:"a_staff@rulingcom.com"}) #setting Roles for users - @good_stu.user_role = @stud_MRK - @bad_stu.user_role = @stud_MRK - @teacher.user_role = @teacher_MRK - @staff.user_role = @staff_MRK + @good_g_stu.role = @stud_MRK + @bad_g_stu.role = @stud_MRK + @good_ug_stu_1.role = @stud_MRK + @good_ug_stu_2.role = @stud_MRK + @bad_ug_stu.role = @stud_MRK + + @good_g_stu.sub_roles = [@graduated_SRK,@ta_SRK] + @bad_g_stu.sub_roles << @graduated_SRK + @good_ug_stu_1.sub_roles << @under_graduated_SRK + @good_ug_stu_2.sub_roles << @under_graduated_SRK + @bad_ug_stu.sub_roles << @under_graduated_SRK - @good_stu.save! - @bad_stu.save! + @teacher.role = @teacher_MRK + @staff.role = @staff_MRK + + @good_g_stu.save! + @bad_g_stu.save! + @good_ug_stu_1.save! + @good_ug_stu_2.save! + @bad_ug_stu.save! + @teacher.save! @staff.save! end - describe "Testing basic structure" do + describe "Starting a ClassBulletin Auth for teacher , staff and ta" do before do - @app_auth = AppAuth.new() - #all stud has access right - @app_auth.user_roles << @stud_MRK + @bulletin_app_auth = AppAuth.new() + #all teacher and staff has access right + @bulletin_app_auth.roles = [@teacher_MRK,@staff_MRK] + #all person with TA sub_role has access right + @bulletin_app_auth.sub_roles << @ta_SRK - #a_bad_stud add to block to app_auth - @app_auth.blocked_users << @bad_stu + #a_bad_ug_stud add to block to bulletin_app_auth + #@bulletin_app_auth.blocked_users << @bad_ug_stu #all teacher has access right - @app_auth.user_roles << @teacher_MRK + # @bulletin_app_auth.roles << @teacher_MRK - @app_auth.privilege_users << @staff - @app_auth.save! + # @bulletin_app_auth.privilege_users << @staff + @bulletin_app_auth.save! end context "Should just initialize all obj that is needed" do - it "Testing @app_auth init result" do - @app_auth.user_roles.should have(2).item + it "Testing @bulletin_app_auth init result" do + @bulletin_app_auth.roles.should have(2).item #teacher staff + @bulletin_app_auth.sub_roles.should have(1).item #ta end - it "@app_auth should have UserRoles: Stud , Teacher " do - key_ary = @app_auth.user_roles.collect do |role| + it "@bulletin_app_auth should have Roles: Staff , Teacher " do + key_ary = @bulletin_app_auth.roles.collect do |role| role.key end - key_ary.should == ["Stud","Teacher"] + key_ary.sort.should == ["Staff","Teacher"].sort end - it "@app_auth should have one Privialage user which is belongs to Staff" do - p_user_ary = @app_auth.privilege_users.collect do |p_user| - p_user.user_role.key - end - p_user_ary.should include("Staff") + it "bulletin_app_auth should have 3 auth users" do + user_ary = [@teacher,@staff,@good_g_stu] + @bulletin_app_auth.auth_users.sort.should == user_ary.sort + check_user_has_app user_ary end - it "@app_auth should have one student listed at blocklist" do - @bad_stu = User.first(conditions:{email:"a_bad_stud@rulingcom.com"}) - @app_auth.blocked_users.should have(1).item - @app_auth.blocked_users.should include(@bad_stu) + it "Adding a undergraduate stud into app_auth by privilege list" do + user_ary = [@teacher,@staff,@good_g_stu,@good_ug_stu_1] + @bulletin_app_auth.add_user_to_privilege_list @good_ug_stu_1 + @bulletin_app_auth.auth_users.sort.should == user_ary.sort + check_user_has_app user_ary end + + it "Adding all graudated-stud into app_auth" do + user_ary = [@teacher,@staff,@good_g_stu,@bad_g_stu] + @bulletin_app_auth.add_sub_role @graduated_SRK + @bulletin_app_auth.auth_users.sort.should == user_ary.sort + check_user_has_app user_ary + end + + it "Blocking bad-graduate student" do + user_ary =[@teacher,@staff,@good_g_stu] + @bulletin_app_auth.add_sub_role @graduated_SRK + @bulletin_app_auth.add_user_to_black_list @bad_g_stu + @bulletin_app_auth.auth_users_after_block_list.sort.should == user_ary.sort + check_user_has_app user_ary + end + + it "Removing all graudated-stud from app_auth" do + user_ary =[@teacher,@staff,@good_g_stu] + @bulletin_app_auth.add_sub_role @graduated_SRK + @bulletin_app_auth.remove_sub_role @graduated_SRK + @bulletin_app_auth.auth_users.sort.should == user_ary.sort + check_user_has_app user_ary + end + + + # it "@bulletin_app_auth should have one Privialage user which is belongs to Staff" do + # p_user_ary = @bulletin_app_auth.privilege_users.collect do |p_user| + # p_user.roles.key + # end + # p_user_ary.should include("Staff") + # end + + # it "@bulletin_app_auth should have one student listed at blocklist" do + # @bad_stu = User.first(conditions:{email:"a_bad_g_stud@rulingcom.com"}) + # @bulletin_app_auth.blocked_users.should have(1).item + # @bulletin_app_auth.blocked_users.should include(@bad_stu) + # end - it "[Development #1]-1.Authorizing roles: roles + blocklist" do - @good_stu = User.first(conditions:{email:"a_good_stud@rulingcom.com"}) - @teacher = User.first(conditions:{email:"a_teacher@rulingcom.com"}) - @staff = User.first(conditions:{email:"a_staff@rulingcom.com"}) - ary = [@good_stu,@teacher,@staff] - @app_auth.auth_users_after_block_list.should == ary - end - - it "[Development #1]-2.Authorizing single users: list of users [new_user1~2]" do - user_emails = ["new_user1","new_user2","new_user3","new_user4"] - user_emails.each do |user_email| - email=user_email+"@rulingcom.com" - new_user = User.new :email=> email - new_user.save + # it "[Development #1]-1.Authorizing roles: roles + blocklist" do + # @good_stu = User.first(conditions:{email:"a_good_g_stud@rulingcom.com"}) + # @teacher = User.first(conditions:{email:"a_teacher@rulingcom.com"}) + # @staff = User.first(conditions:{email:"a_staff@rulingcom.com"}) + # ary = [@good_stu,@teacher,@staff] + # @bulletin_app_auth.auth_users_after_block_list.should == ary + # end + # + # it "[Development #1]-2.Authorizing single users: list of users [new_user1~2]" do + # user_emails = ["new_user1","new_user2","new_user3","new_user4"] + # user_emails.each do |user_email| + # email=user_email+"@rulingcom.com" + # new_user = User.new :email=> email + # new_user.save + # end + # user1= User.first(conditions:{email:"new_user1@rulingcom.com"}) + # user2= User.first(conditions:{email:"new_user2@rulingcom.com"}) + # user3= User.first(conditions:{email:"new_user3@rulingcom.com"}) + # user4= User.first(conditions:{email:"new_user4@rulingcom.com"}) + # + # @bulletin_app_auth.privilege_users << user1 + # @bulletin_app_auth.privilege_users << user2 + # + # @bulletin_app_auth.auth_users_after_block_list.should include(user1,user2) + # @bulletin_app_auth.auth_users_after_block_list.should_not include(user3,user4) + # + # end + # + # it "[Development #1]-3.Authorizing roles and single users: roles + blocklist + list of users" do + # @bulletin_app_auth.auth_users.should have(7).item + # end + # + # it "[Development #1]-4.Authorizing all: blocklist" do + # @bad_stu = User.first(conditions:{email:"a_bad_g_stud@rulingcom.com"}) + # @new_bulletin_app_auth = (AppAuth.new :all => true) + # @new_bulletin_app_auth.blocked_users << @bad_stu + # + # @new_bulletin_app_auth.auth_users.should == User.all.entries + # @new_bulletin_app_auth.auth_users_after_block_list.should_not include(@bad_stu) + # @new_bulletin_app_auth.save! + # end + def check_user_has_app(user_ary) + user_ary.each do |user| + user.avb_apps.should include(@bulletin_app_auth) end - user1= User.first(conditions:{email:"new_user1@rulingcom.com"}) - user2= User.first(conditions:{email:"new_user2@rulingcom.com"}) - user3= User.first(conditions:{email:"new_user3@rulingcom.com"}) - user4= User.first(conditions:{email:"new_user4@rulingcom.com"}) - - @app_auth.privilege_users << user1 - @app_auth.privilege_users << user2 - - @app_auth.auth_users_after_block_list.should include(user1,user2) - @app_auth.auth_users_after_block_list.should_not include(user3,user4) - end - - it "[Development #1]-3.Authorizing roles and single users: roles + blocklist + list of users" do - @app_auth.auth_users.should have(4).item - end - - it "[Development #1]-4.Authorizing all: blocklist" do - @bad_stu = User.first(conditions:{email:"a_bad_stud@rulingcom.com"}) - @new_app_auth = (AppAuth.new :all => true) - @new_app_auth.blocked_users << @bad_stu - - @new_app_auth.auth_users.should == User.all.entries - @new_app_auth.auth_users_after_block_list.should_not include(@bad_stu) - @new_app_auth.save! - end - end + end diff --git a/vendor/built_in_modules/NewBlog/NewBlog.json b/vendor/built_in_modules/NewBlog/NewBlog.json index ce9c80d3..32734d3b 100755 --- a/vendor/built_in_modules/NewBlog/NewBlog.json +++ b/vendor/built_in_modules/NewBlog/NewBlog.json @@ -6,5 +6,6 @@ "intro": "A simple blog……", "update_info": "Some info", "create_date": "11-11-2011", - "app_pages": ["/panel/blog/front_end/"] + "app_pages": ["/panel/blog/front_end/"], + "widgets": ["/panel/blog/widget/latest_post","/panel/blog/widget/"] }