【问题标题】:Using CanCanCan, how do I authorize either/or in a controller?使用 CanCanCan,我如何在控制器中授权/或授权?
【发布时间】:2015-11-23 22:12:50
【问题描述】:

我有一个用于管理多个对象(如用户和组)的页面,并且我想确保只有有权创建至少一种此类对象的用户才能查看该页面。

基本上,我希望能够写出类似的东西

(authorize! :create, User) || (authorize! :create, Group)

有什么建议吗?

【问题讨论】:

  • 让我看看如果我理解,您希望在您的视图或您的 cancan 模型中使用该条件

标签: ruby-on-rails cancancan


【解决方案1】:

实现这一目标的一种方法是混合

load_and_authorize_resource :user
load_and_authorize_resource :through => :user

这是一个方便的助手,用于对控制器中的所有资源调用授权,执行如下操作:

class GroupsController < ActionController::Base
  load_and_authorize_resource
  load_and_authorize_resource :through => :user

  def create
    # Automatically does the following:
    # @group = Group.find(group_params[:id])
    # authorize! :create, @group

    # @user= User.find(group_params[:user_id])
    # authorize! :create, @user
  end

end

因此,您在控制器中加载组和用户对象的位置会根据您的规则/能力自动授权它们,例如

can [:create], [User, Group]

当然,您需要将您的组作为嵌套资源:

resources :users do
  resources :groups
end

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多