From 33edfd779c90a8e7bf9db048cf02e3a1558d81b6 Mon Sep 17 00:00:00 2001 From: Harry Bomrah Date: Wed, 30 Jul 2014 21:40:02 +0800 Subject: [PATCH] new authorization.. yet to complete in alpha.. --- .../javascripts/basic/orbit_js_1.0.1.js | 2 +- .../admin/authorizations_controller.rb | 25 +++- app/controllers/orbit_admin_controller.rb | 7 +- app/helpers/orbit_backend_helper.rb | 10 +- app/models/authorization.rb | 14 +-- app/models/category.rb | 4 + app/models/user.rb | 35 +++++- .../admin/categories/_select_form.html.erb | 8 +- app/views/layouts/_side_bar_content.html.erb | 4 +- config/initializers/authorization.rb | 6 +- lib/orbit_app/helper/context_link_renderer.rb | 21 +++- lib/orbit_app/helper/side_bar_renderer.rb | 27 ++-- lib/orbit_app/module/side_bar.rb | 74 +++++++---- lib/orbit_core_lib.rb | 118 ++++++------------ public/401.html | 28 +++++ 15 files changed, 242 insertions(+), 141 deletions(-) create mode 100644 public/401.html diff --git a/app/assets/javascripts/basic/orbit_js_1.0.1.js b/app/assets/javascripts/basic/orbit_js_1.0.1.js index a5dee8d..c5925cd 100755 --- a/app/assets/javascripts/basic/orbit_js_1.0.1.js +++ b/app/assets/javascripts/basic/orbit_js_1.0.1.js @@ -291,7 +291,7 @@ if($.support.touch) { $el.find('a').removeAttr('href'); }; $el.on(mouseenterEvent, function(e) { - $block.siblings().removeClass('show').eq($(this).index()).addClass('show'); + $block.siblings().removeClass('show').end().eq($(this).index()).addClass('show'); $arrow.stop(true, false).animate({ top: ($(this).position().top+$(this).height()/2)-$arrowHeightFormat+$('.scroller').position().top, },{ diff --git a/app/controllers/admin/authorizations_controller.rb b/app/controllers/admin/authorizations_controller.rb index 762022a..a29f364 100644 --- a/app/controllers/admin/authorizations_controller.rb +++ b/app/controllers/admin/authorizations_controller.rb @@ -35,7 +35,7 @@ class Admin::AuthorizationsController < OrbitAdminController def add_users users = User.find(params[:user_ids]) rescue nil unless users.nil? - authorization = users.map {|u| get_or_create_authorization(u.id)}.first + authorization = users.map {|u| get_or_create_authorization(u)}.first end @users = @module_app.module_managers render 'admin/authorizations/reload_users' @@ -92,16 +92,22 @@ class Admin::AuthorizationsController < OrbitAdminController protected - def get_or_create_authorization(user_id) + def get_or_create_authorization(user) case @type when 'category_authorization' if @object - Authorization.create_category_authorization(@module_app.id, @object.id, user_id) + if user.is_manager?(@module_app) + remove_from_manager(user) + end + Authorization.create_category_authorization(@module_app.id, @object.id, user.id) else @error = t(:no_data) end when nil - Authorization.create_module_authorization(@module_app.id, user_id) + if user.is_sub_manager?(@module_app) + remove_from_sub_manager(user) + end + Authorization.create_module_authorization(@module_app.id, user.id) else auth = @object.get_authorization_by_title("#{@type}_#{@module_app.key}") unless auth @@ -111,6 +117,17 @@ class Admin::AuthorizationsController < OrbitAdminController end end + def remove_from_sub_manager(user) + categories = @module_app.categories.authorized(user) + categories.each do |c| + Authorization.remove_category_authorization(c.id, user.id) + end + end + + def remove_from_manager(user) + Authorization.remove_module_authorization(@module_app.id, user.id) + end + def get_or_create_authorization_with_role(role_id) case @type when 'category_authorization' diff --git a/app/controllers/orbit_admin_controller.rb b/app/controllers/orbit_admin_controller.rb index 6f060a7..96abc40 100644 --- a/app/controllers/orbit_admin_controller.rb +++ b/app/controllers/orbit_admin_controller.rb @@ -1,10 +1,9 @@ class OrbitAdminController < ApplicationController include OrbitCoreLib::Authorize - include OrbitCoreLib::PermissionUtility include Authorize include OrbitBackendHelper - before_action :authenticate_user, :log_user_action + before_action :authenticate_user, :log_user_action, :load_authenticated_categories layout "back_end" def sort @@ -65,4 +64,8 @@ class OrbitAdminController < ApplicationController end end + def load_authenticated_categories + @user_authenticated_categories = current_user.is_admin? ? ["all"] : current_user.approved_categories.collect{|c| c.id} + end + end diff --git a/app/helpers/orbit_backend_helper.rb b/app/helpers/orbit_backend_helper.rb index b88fe1b..0a7f4ac 100644 --- a/app/helpers/orbit_backend_helper.rb +++ b/app/helpers/orbit_backend_helper.rb @@ -85,7 +85,7 @@ module OrbitBackendHelper def select_category(f, module_app) - render :partial => '/admin/categories/select_form', :locals => {:f=> f, :module_app=>module_app, :categories=>module_app.categories.enabled } + render :partial => '/admin/categories/select_form', :locals => {:f=> f, :module_app=>module_app, :categories=>module_app.categories.enabled.authorized(current_user) } end def select_tags(f, module_app) @@ -128,6 +128,14 @@ module OrbitBackendHelper [:name=> t(:visitors_count),:data=>result] end + + def can_edit_or_delete?(obj) + if @user_authenticated_categories.first == "all" + return true + else + @user_authenticated_categories.include?obj.category_id + end + end end diff --git a/app/models/authorization.rb b/app/models/authorization.rb index f0176d7..c5b2157 100644 --- a/app/models/authorization.rb +++ b/app/models/authorization.rb @@ -32,7 +32,7 @@ class Authorization user = User.find(user_id) workgroup = Workgroup.find_by(key: "managers") module_app = ModuleApp.find(module_app_id) - if (user.is_admin? || user.is_manager?(module_app) || user.is_sub_manager?(module_app)|| user.is_manager_with_role?(module_app)) + if (user.is_admin? || user.is_manager?(module_app) || user.is_manager_with_role?(module_app)) puts "User Already Authorized" else a = self.create(module_app_id: module_app_id, user_id: user_id, workgroup_id: workgroup.id) @@ -44,12 +44,8 @@ class Authorization user = User.find(user_id) workgroup = Workgroup.find_by(key: "sub_managers") module_app = ModuleApp.find(module_app_id) - if (user.is_admin? || user.is_manager?(module_app) || user.is_sub_manager?(module_app) || user.is_manager_with_role?(module_app)) - puts "User Already Authorized" - else - a = self.create(category_id: category_id, user_id: user_id, workgroup_id: workgroup.id) - a.save - end + a = self.create(category_id: category_id, user_id: user_id, workgroup_id: workgroup.id) + a.save end def self.create_module_authorization_with_role(module_app_id,role_id) @@ -78,11 +74,11 @@ class Authorization def self.remove_module_authorization(module_app_id,user_id) auth = self.find_by(module_app_id: module_app_id, user_id: user_id) - auth.delete + auth.destroy end def self.remove_category_authorization(category_id,user_id) auth = self.find_by(category_id: category_id, user_id: user_id) - auth + auth.destroy end end diff --git a/app/models/category.rb b/app/models/category.rb index 3369de7..f146632 100644 --- a/app/models/category.rb +++ b/app/models/category.rb @@ -15,4 +15,8 @@ class Category def category_sub_managers Authorization.category_authorized_users(self).pluck(:user_id) end + + def self.authorized(user) + user.approved_categories + end end diff --git a/app/models/user.rb b/app/models/user.rb index e22e6ee..949d0bf 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -108,7 +108,6 @@ class User module_app_categories = module_app.categories.map {|c| c.id} rescue nil authorized_categories = self.authorizations.map {|a| a.category.id if (a.category.present? && a.workgroup.key.eql?("sub_managers"))} intersection = (module_app_categories & authorized_categories) - if ((intersection.count > 0 if intersection.present?) && !self.is_admin? && !self.is_manager?(module_app)) true else @@ -128,6 +127,40 @@ class User end end + def is_normal_user? + if self.is_admin? + return false + elsif self.authorizations.empty? + return true + else + return false + end + end + + def approved_categories + categories = [] + if self.is_admin? + Category.all.each do |c| + categories << c + end + else + self.authorizations.each do |auth| + case auth.workgroup.key + when "managers" + if !auth.module_app.categories.blank? + auth.module_app.categories.each do|c| + categories << c + end + end + when "sub_managers" + c = Category.find(auth.category_id) rescue nil + categories << c if !c.nil? + end + end + end + categories + end + def user_workgroup(module_app) if self.is_admin? "Admin" diff --git a/app/views/admin/categories/_select_form.html.erb b/app/views/admin/categories/_select_form.html.erb index 8f3ebe5..9cd1d19 100644 --- a/app/views/admin/categories/_select_form.html.erb +++ b/app/views/admin/categories/_select_form.html.erb @@ -1,9 +1,11 @@ <%= f.select :category_id, categories.collect{|t| [ t.title, t.id ]} %> - +<% if current_user.is_admin? || current_user.is_manager?(module_app) %> + +<% end %>