diff --git a/app/assets/javascripts/lib/member/list-view.js b/app/assets/javascripts/lib/member/list-view.js old mode 100755 new mode 100644 diff --git a/app/assets/javascripts/lib/member/member-role.js.erb b/app/assets/javascripts/lib/member/member-role.js.erb old mode 100755 new mode 100644 diff --git a/app/assets/javascripts/lib/member/member.js b/app/assets/javascripts/lib/member/member.js old mode 100755 new mode 100644 diff --git a/app/assets/javascripts/lib/member/registration_approval.js b/app/assets/javascripts/lib/member/registration_approval.js old mode 100755 new mode 100644 diff --git a/app/assets/javascripts/lib/member/role-forms.js b/app/assets/javascripts/lib/member/role-forms.js old mode 100755 new mode 100644 diff --git a/app/assets/javascripts/lib/member/sort.js.erb b/app/assets/javascripts/lib/member/sort.js.erb old mode 100755 new mode 100644 diff --git a/app/assets/javascripts/lib/member/textarea-lang-btn.js b/app/assets/javascripts/lib/member/textarea-lang-btn.js old mode 100755 new mode 100644 diff --git a/app/controllers/admin/authorizations_controller.rb b/app/controllers/admin/authorizations_controller.rb index 3da0d14..5a6161e 100644 --- a/app/controllers/admin/authorizations_controller.rb +++ b/app/controllers/admin/authorizations_controller.rb @@ -1,4 +1,5 @@ class Admin::AuthorizationsController < OrbitAdminController + prepend_before_filter :admin_or_manager layout "back_end" def index @@ -17,12 +18,12 @@ class Admin::AuthorizationsController < OrbitAdminController end unless @objects.blank? @object ||= @objects.first - @authorizations = Authorization.category_authorized_users(@object.id) + @authorizations = Authorization.category_sub_managers(@object) else @error = t(:no_data) end else - @authorizations = Authorization.module_authorized_users(@module_app.id) + @authorizations = @module_app.module_managers rescue nil end elsif @module_apps @module_app = @module_apps.first @@ -31,15 +32,23 @@ class Admin::AuthorizationsController < OrbitAdminController end end - def add_users - users = User.find(params[:user_ids]) rescue nil - unless users.nil? - authorization = get_or_create_authorization - add_users_to_auth(authorization, users) - end - @users = authorization.authorized_users - render 'admin/authorizations/reload_users' + 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 end + @users = @module_app.module_managers + render 'admin/authorizations/reload_users' + end + + def add_roles + roles = Role.find(params[:role_ids]) rescue nil + unless roles.nil? + authorization = roles.map { |r| get_or_create_authorization_with_role(r.id)}.first + end + @users = @module_app.module_managers + render 'admin/authorizations/reload_users' + end def modal_select existing_users = User.find(params[:ids]) rescue [] @@ -47,24 +56,103 @@ class Admin::AuthorizationsController < OrbitAdminController if @type @object_id = @object.id if @object @sorted_users = roles.inject({}) do |users, role| - users[role] = role.users.where(admin: false) - existing_users - @module_app.managers + users_for_role = role.member_profiles.select {|m| !m.user.is_admin?}.map {|u| u.user} + users[role] = users_for_role - existing_users - @module_app.module_managers users end else @sorted_users = roles.inject({}) do |users, role| - users[role] = role.users.where(admin: false) - existing_users + users_for_role = role.member_profiles.select {|m| !m.user.is_admin?}.map {|u| u.user} + users[role] = users_for_role - existing_users users end end end + def remove_roles + roles = Role.find(params[:role_ids]) rescue [] + unless roles.blank? + authorization = get_or_create_authorization + remove_roles_form_auth(authorization, roles) + end + @users = authorization.authorized_users + render 'admin/authorizations/reload_users' + end + + def remove_users + @users = User.find(params[:ids]) rescue [] + unless @users.blank? + authorization = @users.map {|u| remove_authorizations(u.id)}.first + end + @users = @module_app.module_managers + render 'admin/authorizations/reload_users' + end + + + protected + + def get_or_create_authorization(user_id) + case @type + when 'category_authorization' + if @object + 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) + else + auth = @object.get_authorization_by_title("#{@type}_#{@module_app.key}") + unless auth + auth = Authorization.create_category_authorization(@module_app.id, @object.id, user_id) if @type.include?('authorization') + end + auth + end + end + + def get_or_create_authorization_with_role(role_id) + case @type + when 'category_authorization' + if @object + Authorization.create_category_authorization_with_role(@module_app.id, @object.id, role_id) + else + @error = t(:no_data) + end + when nil + Authorization.create_module_authorization_with_role(@module_app.id,role_id) + else + auth = @object.get_authorization_by_title("#{@type}_#{@module_app.key}") + unless auth + auth = Authorization.create_category_authorization_with_role(@module_app.id, @object.id, role_id) + end + auth + end + end + + def remove_authorizations(user_id) + case @type + when 'category_authorization' + if @object + Authorization.remove_category_authorization(@object.id, user_id) + @error = t(:no_data) + end + when nil + Authorization.remove_module_authorization(@module_app.id, user_id) + else + auth = @object.get_authorization_by_title("#{@type}_#{@module_app.key}") + unless auth + auth = Authorization.remove_category_authorization(@object.id, user_id) + end + auth + end + end private def admin_or_manager @override_can_use = true setup_vars - authenticate_user! + authenticate_user current_user.is_manager?(@module_app) unless current_user.is_admin? end diff --git a/app/controllers/admin/dashboards_controller.rb b/app/controllers/admin/dashboards_controller.rb index 01bddb3..0cc1d07 100644 --- a/app/controllers/admin/dashboards_controller.rb +++ b/app/controllers/admin/dashboards_controller.rb @@ -1,4 +1,7 @@ -class Admin::DashboardsController < OrbitAdminController +class Admin::DashboardsController < ApplicationController + before_action :authenticate_user + layout "back_end" + def index end end diff --git a/app/controllers/admin/sites_controller.rb b/app/controllers/admin/sites_controller.rb index 345c150..4c3879a 100644 --- a/app/controllers/admin/sites_controller.rb +++ b/app/controllers/admin/sites_controller.rb @@ -1,6 +1,7 @@ class Admin::SitesController < OrbitAdminController - before_filter :get_site + before_filter :get_site layout "structure" + def mail_setting end diff --git a/app/controllers/concerns/authorize.rb b/app/controllers/concerns/authorize.rb index 06e3c8a..1a3aefe 100644 --- a/app/controllers/concerns/authorize.rb +++ b/app/controllers/concerns/authorize.rb @@ -19,6 +19,14 @@ module Authorize end end + def open_for_user + if current_user.present? + "Authorized" + else + render "public/404" , layout: "back_end" + end + end + private def set_variables(module_app) diff --git a/app/models/authorization.rb b/app/models/authorization.rb index 22e0673..dad2a11 100644 --- a/app/models/authorization.rb +++ b/app/models/authorization.rb @@ -10,20 +10,79 @@ class Authorization scope :module_authorized_users, ->(module_app){ where(module_app_id: module_app) } scope :category_authorized_users, ->(category){ where(category_id: category) } - def self.create_authorization(module_app_id=nil,category_id=nil,user_id,type) - user = User.find(user_id) - if user.is_admin? - elsif user.workgroup.nil? - if type == "module_authorization" - workgroup = Workgroup.find_by(key: "managers") - user.update_attributes(workgroup_id: workgroup.id) - a = self.new(module_app_id: module_app_id, user_id: user_id, workgroup_id: workgroup.id) - a.save - elsif type == "category_authorization" - self.create(category_id: category_id, user_id: user_id ) - workgroup = Workgroup.find_by(key: "sub_managers") - user.update_attributes(workgroup_id: workgroup.id) - end - end + + def self.category_sub_managers(category) + workgroup = Workgroup.find_by(key: 'sub_managers') + category_authorizations = self.category_authorized_users(category).where(:user_id.ne => nil, :workgroup_id => workgroup.id).map {|a| a.user} rescue nil + category_authorzied_roles = self.category_authorized_users(category).where(:role_id.ne => nil).map {|a| a.role}.first rescue nil + users_authorized_by_roles = category_authorzied_roles.member_profiles.map {|u| u.user} rescue [] + if users_authorized_by_roles.present? + category_authorizations.inject(users_authorized_by_roles, :<<) rescue [] + else + category_authorizations + end + end + + def self.category_role_sub_managers(category) + authorizations = self.category_authorized_users(category) + users = authorizations.map { |a| a.role if role.present? } + end + + def self.create_module_authorization(module_app_id,user_id) + 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)) + puts "User Already Authorized" + else + a = self.create(module_app_id: module_app_id, user_id: user_id, workgroup_id: workgroup.id) + a.save + end + end + + def self.create_category_authorization(module_app_id, category_id, user_id) + user = User.find(user_id) + workgroup = Workgroup.find_by(key: "sub_managers") + module_app = ModuleApp.find_by(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 + end + + def self.create_module_authorization_with_role(module_app_id,role_id) + current_auth = self.where(role_id: role_id, module_app_id: module_app_id) + workgroup = Workgroup.find_by(key: "managers") + module_app = ModuleApp.find(module_app_id) + if current_auth.present? + puts "User Already Authorized" + else + a = self.create(module_app_id: module_app_id, role_id: role_id, workgroup_id: workgroup.id) + a.save + end + end + + def self.create_category_authorization_with_role(module_app_id,category_id,role_id) + current_auth = self.where(role_id: role_id, category_id: category_id) + workgroup = Workgroup.find_by(key: "sub_managers") + module_app = ModuleApp.find(module_app_id) + if current_auth.present? + puts "User Already Authorized" + else + a = self.create(category_id: category_id, role_id: role_id, workgroup_id: workgroup.id) + a.save + end + end + + 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 + end + + def self.remove_category_authorization(category_id,user_id) + auth = self.find_by(category_id: category_id, user_id: user_id) + auth end end diff --git a/app/models/module_app.rb b/app/models/module_app.rb index 6c65010..2616798 100644 --- a/app/models/module_app.rb +++ b/app/models/module_app.rb @@ -66,9 +66,15 @@ class ModuleApp Authorization.module_authorized_users(self).pluck(:user_id) end - def role_module_managers - users = Authorization.module_authorized_users(self).pluck(:user_id) - roles = Authorization.module_authorized_users(self).pluck(:role_id) - users + roles + def role_managers + Authorization.module_authorized_users(self).pluck(:role_id) + end + + def module_managers + workgroup = Workgroup.find_by(key: 'sub_managers') + authorized_users = Authorization.module_authorized_users(self).where(:user_id.ne => nil, :workgroup_id.ne => workgroup.id).map {|u| u.user} rescue nil + authorized_members = Authorization.module_authorized_users(self).where(:role_id.ne => nil).map {|m| m.role.member_profiles}.first rescue nil + users_authorized_by_role = authorized_members.map {|u| u.user} rescue [] + authorized_users.inject(users_authorized_by_role, :<<) rescue [] end end diff --git a/app/models/site.rb b/app/models/site.rb index 63135ab..4b6e7dd 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -2,7 +2,7 @@ class Site include Mongoid::Document include Mongoid::Timestamps - field :title, localize: true + field :title, type: String, localize: true field :school, type: String field :department, type: String field :address, type: String diff --git a/app/models/user.rb b/app/models/user.rb index 2d49f44..5b9c649 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -48,7 +48,26 @@ class User end end - def is_authorized_with_role?(module_app) + def is_manager_with_role?(module_app) + user_roles = self.member_profile.role_ids.map {|r| r} + authorized_roles = module_app.role_managers rescue [] + intersection = (user_roles & authorized_roles) + + if ((intersection.count > 0 if intersection.present?) && !self.is_admin? && !self.is_manager?(module_app) && !self.is_sub_manager?(module_app)) + true + else + false + end + end + + def user_workgroup(module_app) + if self.is_admin? + "Admin" + elsif (self.is_manager?(module_app) || is_manager_with_role?(module_app)) + "Manager" + elsif self.is_sub_manager?(module_app) + "Sub Manager" + end end def self.not_admins diff --git a/app/views/admin/authorizations/_user.html.erb b/app/views/admin/authorizations/_user.html.erb index 0f081fa..2d74da9 100644 --- a/app/views/admin/authorizations/_user.html.erb +++ b/app/views/admin/authorizations/_user.html.erb @@ -1,16 +1,10 @@ -<% if user.user.present?%> -