diff options
Diffstat (limited to 'lib/redmine/access_control.rb')
-rw-r--r-- | lib/redmine/access_control.rb | 22 |
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}"} |