summaryrefslogtreecommitdiffstats
path: root/lib/redmine/access_control.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/redmine/access_control.rb')
-rw-r--r--lib/redmine/access_control.rb22
1 files changed, 21 insertions, 1 deletions
diff --git a/lib/redmine/access_control.rb b/lib/redmine/access_control.rb
index 54b344b7e..f5b25f277 100644
--- a/lib/redmine/access_control.rb
+++ b/lib/redmine/access_control.rb
@@ -46,27 +46,47 @@ module Redmine
def loggedin_only_permissions
@loggedin_only_permissions ||= @permissions.select {|p| p.require_loggedin?}
end
+
+ def available_project_modules
+ @available_project_modules ||= @permissions.collect(&:project_module).uniq.compact
+ end
+
+ def modules_permissions(modules)
+ @permissions.select {|p| p.project_module.nil? || modules.include?(p.project_module.to_s)}
+ end
end
class Mapper
+ def initialize
+ @project_module = nil
+ end
+
def permission(name, hash, options={})
@permissions ||= []
+ options.merge!(:project_module => @project_module)
@permissions << Permission.new(name, hash, options)
end
+ def project_module(name, options={})
+ @project_module = name
+ yield self
+ @project_module = nil
+ end
+
def mapped_permissions
@permissions
end
end
class Permission
- attr_reader :name, :actions
+ attr_reader :name, :actions, :project_module
def initialize(name, hash, options)
@name = name
@actions = []
@public = options[:public] || false
@require = options[:require]
+ @project_module = options[:project_module]
hash.each do |controller, actions|
if actions.is_a? Array
@actions << actions.collect {|action| "#{controller}/#{action}"}