Redmine: проверьте, есть ли у пользователя определенные привилегии

Пытаюсь написать плагин, для которого мне нужно проверить, есть ли у пользователя определенное разрешение. Например, я думаю о чем-то подобном

if (user.current has "view_private_notes" ) 
do something
end

person born    schedule 18.04.2013    source источник


Ответы (1)


Проверьте модель пользователя. Есть почти точное, что вы хотите:

  # Return true if the user is allowed to do the specified action on a specific context
  # Action can be:
  # * a parameter-like Hash (eg. :controller => 'projects', :action => 'edit')
  # * a permission Symbol (eg. :edit_project)
  # Context can be:
  # * a project : returns true if user is allowed to do the specified action on this project
  # * an array of projects : returns true if user is allowed on every project
  # * nil with options[:global] set : check if user has at least one role allowed for this action,
  #   or falls back to Non Member / Anonymous permissions depending if the user is logged
  def allowed_to?(action, context, options={}, &block)

Вы можете расширить существующие модели с помощью вашего плагина и добавить методы, которые вам нравятся, комбинируя существующие:

//инит.рб

 ActionDispatch::Callbacks.to_prepare do
  unless User.included_modules.include?(MyPlugin::UserPatch)
    User.send(:include, MyPlugin::UserPatch)
  end
 end

//user_patch.rb Примерно так:

 def self.included(base)
   base.class_eval do
     unloadable

   # need to pass context to be able trigger allowed_to method in old way.
   has_right_view_project(project,context)
     self.allowed_to?({:controller => context[:controller], :action => context[:action]}, project, :global => true)
   end
 end

На самом деле легко использовать существующие методы.

person Noma4i    schedule 22.04.2013