【发布时间】:2015-11-23 22:12:50
【问题描述】:
我有一个用于管理多个对象(如用户和组)的页面,并且我想确保只有有权创建至少一种此类对象的用户才能查看该页面。
基本上,我希望能够写出类似的东西
(authorize! :create, User) || (authorize! :create, Group)
有什么建议吗?
【问题讨论】:
-
让我看看如果我理解,您希望在您的视图或您的 cancan 模型中使用该条件
我有一个用于管理多个对象(如用户和组)的页面,并且我想确保只有有权创建至少一种此类对象的用户才能查看该页面。
基本上,我希望能够写出类似的东西
(authorize! :create, User) || (authorize! :create, Group)
有什么建议吗?
【问题讨论】:
实现这一目标的一种方法是混合
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
希望对你有帮助。
【讨论】: