2013-10-18 39 views
0

我正在使用cancan gem進行授權。我已經定義了ability.rb模塊來初始化不同模塊的角色及其權限。如何使用cancan定義條件性能力

`def initialize(user) 
user ||= User.new # guest user (not logged in) 
members = user.members 
members.each do |member| 
    role = member.role 
    if role.presence 
    permissions = role.permissions 

    permissions.each do |permission| 
     actions = Array.new 
     actions = permission.activity_name.split(",") if permission.activity_name.presence 
     app_module = permission.application_module 
     actions.each do |action| 
     if app_module.module_name == "Project" 
      Rails.logger.debug "in if" 
      can action.downcase.to_sym, app_module.module_name.constantize, :id => member.project_id if action.presence 
     elsif app_module.module_name == "Sequence" 
      Rails.logger.debug "in sequence and project id is #{member.project_id} and action is #{action}" 
      can action.downcase.to_sym, app_module.module_name.constantize, :project_id => 0..1 if action.presence 

     else 
      Rails.logger.debug "Module name is #{app_module.module_name}" 
      can action.downcase.to_sym, app_module.module_name.constantize if action.presence 
     end 
     end 

    end 

    end 
end 

end`

這裏用戶分配一個項目,項目有許多片斷。 如果用戶已分配了一個項目,然後ID 1我有隻獲取其項目編號爲1

在控制器我寫這些序列 - load_and_authorize_resource

的權限項目控制器是正確牽強,但對於序列控制器,如果我通過項目ID也不限制其他項目。

誰能幫我

回答

1

條件的能力將是你的ability.rb文件。

你會做這樣的事情在你的ability.rb文件:

can [:<actions>], Sequence do |sequence| 
    sequence.project.user_id == user.id 
end