openproject-global_roles 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|