openproject-global_roles 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/CHANGELOG.md +22 -0
- data/README.md +89 -0
- data/app/assets/javascripts/global_roles/global_roles.js +91 -0
- data/app/assets/javascripts/global_roles/principal_roles.js +51 -0
- data/app/assets/stylesheets/global_roles/global_roles.css +18 -0
- data/app/controllers/principal_roles_controller.rb +139 -0
- data/app/models/global_role.rb +46 -0
- data/app/models/principal_role.rb +29 -0
- data/app/views/principal_roles/_errors.html.erb +13 -0
- data/app/views/principal_roles/_show_table_row.html.erb +28 -0
- data/app/views/principal_roles/index.html.erb +47 -0
- data/app/views/roles/_form.html.erb +52 -0
- data/app/views/roles/_global_attributes.html.erb +12 -0
- data/app/views/roles/_global_form.html.erb +12 -0
- data/app/views/roles/_member_attributes.html.erb +17 -0
- data/app/views/roles/_member_form.html.erb +39 -0
- data/app/views/roles/_permissions.html.erb +27 -0
- data/app/views/roles/edit.html.erb +20 -0
- data/app/views/roles/index.html.erb +57 -0
- data/app/views/roles/new.html.erb +18 -0
- data/app/views/shared/_global_roles_header.html.erb +16 -0
- data/app/views/users/_available_global_role.html.erb +14 -0
- data/app/views/users/_available_global_roles.html.erb +32 -0
- data/app/views/users/_global_roles.html.erb +33 -0
- data/config/locales/de.yml +11 -0
- data/config/locales/en.yml +11 -0
- data/config/routes.rb +14 -0
- data/db/migrate/001_sti_for_roles.rb +34 -0
- data/doc/COPYRIGHT.rdoc +16 -0
- data/doc/GPL.txt +674 -0
- data/lib/open_project/global_roles.rb +16 -0
- data/lib/open_project/global_roles/engine.rb +89 -0
- data/lib/open_project/global_roles/patches.rb +13 -0
- data/lib/open_project/global_roles/patches/access_control_patch.rb +41 -0
- data/lib/open_project/global_roles/patches/permission_patch.rb +49 -0
- data/lib/open_project/global_roles/patches/principal_patch.rb +24 -0
- data/lib/open_project/global_roles/patches/role_patch.rb +47 -0
- data/lib/open_project/global_roles/patches/roles_controller_patch.rb +62 -0
- data/lib/open_project/global_roles/patches/roles_helper_patch.rb +27 -0
- data/lib/open_project/global_roles/patches/user_patch.rb +24 -0
- data/lib/open_project/global_roles/patches/users_controller_patch.rb +34 -0
- data/lib/open_project/global_roles/patches/users_helper_patch.rb +39 -0
- data/lib/open_project/global_roles/principal_allowance_evaluator/global.rb +24 -0
- data/lib/open_project/global_roles/version.rb +16 -0
- data/lib/openproject-global_roles.rb +12 -0
- data/spec/controllers/principal_roles_controller_spec.rb +163 -0
- data/spec/controllers/roles_controller_spec.rb +315 -0
- data/spec/controllers/users_controller_spec.rb +57 -0
- data/spec/factories/global_role_factory.rb +16 -0
- data/spec/factories/principal_role_factory.rb +17 -0
- data/spec/lib/access_control_spec.rb +56 -0
- data/spec/lib/global_roles/principal_allowance_evaluator/global_spec.rb +84 -0
- data/spec/lib/loader_spec.rb +40 -0
- data/spec/lib/permission_spec.rb +41 -0
- data/spec/models/global_role_spec.rb +175 -0
- data/spec/models/principal_role_spec.rb +48 -0
- data/spec/models/principal_spec.rb +38 -0
- data/spec/models/role_spec.rb +43 -0
- data/spec/models/user_spec.rb +20 -0
- data/spec/plugin_spec_helper.rb +152 -0
- data/spec/spec_helper.rb +15 -0
- metadata +152 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject
|
13
|
+
module GlobalRoles
|
14
|
+
require "open_project/global_roles/engine"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject::GlobalRoles
|
13
|
+
class Engine < ::Rails::Engine
|
14
|
+
engine_name :openproject_global_roles
|
15
|
+
|
16
|
+
config.autoload_paths += Dir["#{config.root}/lib/"]
|
17
|
+
|
18
|
+
spec = Bundler.environment.specs['openproject-global_roles'][0]
|
19
|
+
initializer 'global_roles.register_plugin' do
|
20
|
+
require_dependency 'open_project/global_roles/patches/permission_patch'
|
21
|
+
|
22
|
+
Redmine::Plugin.register :openproject_global_roles do
|
23
|
+
name 'OpenProject Global Roles'
|
24
|
+
author ((spec.authors.kind_of? Array) ? spec.authors[0] : spec.authors)
|
25
|
+
author_url "http://finn.de"
|
26
|
+
description spec.description
|
27
|
+
version spec.version
|
28
|
+
url spec.homepage
|
29
|
+
|
30
|
+
requires_openproject ">= 3.0.0pre13"
|
31
|
+
|
32
|
+
Redmine::AccessControl.permission(:add_project).global = true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
initializer 'global_roles.precompile_assets' do
|
37
|
+
Rails.application.config.assets.precompile += %w(global_roles.css global_roles.js)
|
38
|
+
end
|
39
|
+
|
40
|
+
# adds our factories to factory girl's load path
|
41
|
+
initializer "global_roles.register_factories", :after => "factory_girl.set_factory_paths" do |app|
|
42
|
+
FactoryGirl.definition_file_paths << File.expand_path(self.root.to_s + '/spec/factories') if defined?(FactoryGirl)
|
43
|
+
end
|
44
|
+
|
45
|
+
initializer 'global_roles.register_test_paths' do |app|
|
46
|
+
app.config.plugins_to_test_paths << self.root
|
47
|
+
end
|
48
|
+
|
49
|
+
config.before_configuration do |app|
|
50
|
+
# This is required for the routes to be loaded first
|
51
|
+
# as the routes should be prepended so they take precedence over the core.
|
52
|
+
app.config.paths['config/routes'].unshift File.join(File.dirname(__FILE__), "..", "..", "..", "config", "routes.rb")
|
53
|
+
end
|
54
|
+
|
55
|
+
initializer "global_roles.remove_duplicate_routes", :after => "add_routing_paths" do |app|
|
56
|
+
# removes duplicate entry from app.routes_reloader
|
57
|
+
# As we prepend the plugin's routes to the load_path up front and rails
|
58
|
+
# adds all engines' config/routes.rb later, we have double loaded the routes
|
59
|
+
# This is not harmful as such but leads to duplicate routes which decreases performance
|
60
|
+
app.routes_reloader.paths.uniq!
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
config.to_prepare do
|
65
|
+
require_dependency 'open_project/global_roles/patches'
|
66
|
+
|
67
|
+
# lib patches
|
68
|
+
require_dependency 'open_project/global_roles/patches/access_control_patch'
|
69
|
+
require_dependency 'open_project/global_roles/patches/permission_patch'
|
70
|
+
|
71
|
+
# Model Patches
|
72
|
+
require_dependency 'open_project/global_roles/patches/principal_patch'
|
73
|
+
require_dependency 'open_project/global_roles/patches/role_patch'
|
74
|
+
require_dependency 'open_project/global_roles/patches/user_patch'
|
75
|
+
|
76
|
+
# Controller Patches
|
77
|
+
require_dependency 'open_project/global_roles/patches/roles_controller_patch'
|
78
|
+
require_dependency 'open_project/global_roles/patches/users_controller_patch'
|
79
|
+
|
80
|
+
# Helper Patches
|
81
|
+
require_dependency 'open_project/global_roles/patches/roles_helper_patch'
|
82
|
+
require_dependency 'open_project/global_roles/patches/users_helper_patch'
|
83
|
+
|
84
|
+
User.register_allowance_evaluator OpenProject::GlobalRoles::PrincipalAllowanceEvaluator::Global
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject::GlobalRoles::Patches
|
13
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject::GlobalRoles::Patches
|
13
|
+
module AccessControlPatch
|
14
|
+
def self.included(base)
|
15
|
+
base.send(:extend, ClassMethods)
|
16
|
+
|
17
|
+
base.class_eval do
|
18
|
+
class << self
|
19
|
+
alias_method :available_project_modules_without_no_global, :available_project_modules unless method_defined?(:available_project_modules_without_no_global)
|
20
|
+
alias_method :available_project_modules, :available_project_modules_with_no_global
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module ClassMethods
|
26
|
+
def available_project_modules_with_no_global
|
27
|
+
@available_project_modules = (
|
28
|
+
@permissions.reject{|p| p.global? }.collect(&:project_module) +
|
29
|
+
@project_modules_without_permissions
|
30
|
+
).uniq.compact
|
31
|
+
available_project_modules_without_no_global
|
32
|
+
end
|
33
|
+
|
34
|
+
def global_permissions
|
35
|
+
@permissions.select {|p| p.global?}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Redmine::AccessControl.send(:include, OpenProject::GlobalRoles::Patches::AccessControlPatch)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
require_dependency 'redmine/access_control'
|
13
|
+
|
14
|
+
module OpenProject::GlobalRoles::Patches
|
15
|
+
module PermissionPatch
|
16
|
+
def self.included(base)
|
17
|
+
base.send(:include, InstanceMethods)
|
18
|
+
|
19
|
+
base.class_eval do
|
20
|
+
unloadable
|
21
|
+
|
22
|
+
alias_method_chain :initialize, :global_option
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module InstanceMethods
|
27
|
+
def initialize_with_global_option(name, hash, options)
|
28
|
+
@global = options[:global] || false
|
29
|
+
initialize_without_global_option(name, hash, options)
|
30
|
+
end
|
31
|
+
|
32
|
+
def global?
|
33
|
+
@global || global_require
|
34
|
+
end
|
35
|
+
|
36
|
+
def global=(bool)
|
37
|
+
@global = bool
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def global_require
|
43
|
+
@require && @require == :global
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
Redmine::AccessControl::Permission.send(:include, OpenProject::GlobalRoles::Patches::PermissionPatch)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject::GlobalRoles::Patches
|
13
|
+
module PrincipalPatch
|
14
|
+
def self.included(base)
|
15
|
+
base.class_eval do
|
16
|
+
|
17
|
+
has_many :principal_roles, :dependent => :destroy
|
18
|
+
has_many :global_roles, :through => :principal_roles, :source => :role
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Principal.send(:include, OpenProject::GlobalRoles::Patches::PrincipalPatch)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject::GlobalRoles::Patches
|
13
|
+
module RolePatch
|
14
|
+
def self.included(base)
|
15
|
+
base.send(:include, InstanceMethods)
|
16
|
+
base.send(:extend, ClassMethods)
|
17
|
+
|
18
|
+
|
19
|
+
base.class_eval do
|
20
|
+
scope :givable, where(:builtin => 0, :type => 'Role').order('position')
|
21
|
+
|
22
|
+
class << self
|
23
|
+
alias_method :find_all_givable_without_no_global_roles, :find_all_givable unless method_defined?(:find_all_givable_without_no_global_roles)
|
24
|
+
alias_method :find_all_givable, :find_all_givable_with_no_global_roles
|
25
|
+
end
|
26
|
+
|
27
|
+
alias_method_chain :setable_permissions, :no_global_roles
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
def find_all_givable_with_no_global_roles
|
33
|
+
givable.all
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
module InstanceMethods
|
38
|
+
def setable_permissions_with_no_global_roles
|
39
|
+
setable_permissions = setable_permissions_without_no_global_roles
|
40
|
+
setable_permissions -= Redmine::AccessControl.global_permissions
|
41
|
+
setable_permissions
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
Role.send(:include, OpenProject::GlobalRoles::Patches::RolePatch)
|
@@ -0,0 +1,62 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject::GlobalRoles::Patches
|
13
|
+
module RolesControllerPatch
|
14
|
+
def self.included(base)
|
15
|
+
base.send(:include, InstanceMethods)
|
16
|
+
|
17
|
+
base.class_eval do
|
18
|
+
alias_method_chain :create, :global_roles
|
19
|
+
alias_method_chain :new, :global_roles
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
module InstanceMethods
|
24
|
+
|
25
|
+
def new_with_global_roles
|
26
|
+
new_without_global_roles
|
27
|
+
|
28
|
+
@member_permissions = (@role.setable_permissions || @permissions)
|
29
|
+
@global_permissions = GlobalRole.setable_permissions
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_with_global_roles
|
33
|
+
if params['global_role']
|
34
|
+
create_global_role
|
35
|
+
else
|
36
|
+
#we have to duplicate unpatched behaviour here in order to set the parameters for the overwritten views
|
37
|
+
@role = Role.new(params[:role] || { :permissions => Role.non_member.permissions })
|
38
|
+
@member_permissions = (@role.setable_permissions || @permissions)
|
39
|
+
@global_permissions = GlobalRole.setable_permissions
|
40
|
+
create_without_global_roles
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def create_global_role
|
47
|
+
@role = GlobalRole.new params[:role]
|
48
|
+
if @role.save
|
49
|
+
flash[:notice] = l(:notice_successful_create)
|
50
|
+
redirect_to :action => 'index'
|
51
|
+
else
|
52
|
+
@roles = Role.all :order => 'builtin, position'
|
53
|
+
@member_permissions = Role.new.setable_permissions
|
54
|
+
@global_permissions = GlobalRole.setable_permissions
|
55
|
+
render :template => 'roles/new'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
RolesController.send(:include, OpenProject::GlobalRoles::Patches::RolesControllerPatch)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
require_dependency "roles_helper"
|
13
|
+
|
14
|
+
module OpenProject::GlobalRoles::Patches
|
15
|
+
module RolesHelperPatch
|
16
|
+
def self.included(base)
|
17
|
+
base.class_eval do
|
18
|
+
|
19
|
+
def permissions_id permissions
|
20
|
+
"permissions_" + permissions[0].hash.to_s
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
RolesHelper.send(:include, OpenProject::GlobalRoles::Patches::RolesHelperPatch)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
module OpenProject::GlobalRoles::Patches
|
13
|
+
module UserPatch
|
14
|
+
def self.included(base)
|
15
|
+
base.class_eval do
|
16
|
+
|
17
|
+
has_many :principal_roles, :dependent => :destroy, :foreign_key => 'principal_id'
|
18
|
+
has_many :global_roles, :through => :principal_roles, :source => :role
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
User.send(:include, OpenProject::GlobalRoles::Patches::UserPatch)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
require_dependency "users_controller"
|
13
|
+
|
14
|
+
module OpenProject::GlobalRoles::Patches
|
15
|
+
module UsersControllerPatch
|
16
|
+
def self.included(base)
|
17
|
+
base.send(:include, InstanceMethods)
|
18
|
+
|
19
|
+
base.class_eval do
|
20
|
+
|
21
|
+
before_filter :add_global_roles, :only => [:edit]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module InstanceMethods
|
26
|
+
private
|
27
|
+
def add_global_roles
|
28
|
+
@global_roles = GlobalRole.all
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
UsersController.send(:include, OpenProject::GlobalRoles::Patches::UsersControllerPatch)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#-- copyright
|
2
|
+
# OpenProject is a project management system.
|
3
|
+
#
|
4
|
+
# Copyright (C) 2010-2013 the OpenProject Team
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU General Public License version 3.
|
8
|
+
#
|
9
|
+
# See doc/COPYRIGHT.rdoc for more details.
|
10
|
+
#++
|
11
|
+
|
12
|
+
require_dependency 'users_helper'
|
13
|
+
|
14
|
+
module OpenProject::GlobalRoles::Patches
|
15
|
+
module UsersHelperPatch
|
16
|
+
def self.included(base)
|
17
|
+
base.send(:include, InstanceMethods)
|
18
|
+
|
19
|
+
base.class_eval do
|
20
|
+
|
21
|
+
alias_method_chain :user_settings_tabs, :global_roles
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module InstanceMethods
|
26
|
+
|
27
|
+
def user_settings_tabs_with_global_roles
|
28
|
+
tabs = user_settings_tabs_without_global_roles
|
29
|
+
@global_roles ||= GlobalRole.all
|
30
|
+
tabs << {:name => 'global_roles', :partial => 'users/global_roles', :label => "global_roles"}
|
31
|
+
tabs
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
UsersHelper.send(:include, OpenProject::GlobalRoles::Patches::UsersHelperPatch)
|