在我的应用程序中,用户可以将另一个用户指定为他们的“账户经理”,而账户经理则可以修改所有用户信息。我定义了以下能力:
```html
在我检查的视图中,我使用以下内容:
到目前为止,一切都很顺利。我的问题在于控制器。在我的PublicationsController中,我添加了:
然而,这总是会抛出AccessDenied异常,因为对于发布内容的检查没有将用户对象传递给ability(尝试在ability中检查用户对象显示为nil)。
有什么想法可以实现这个吗?
tl;dr:使用CanCan来授权访问资源。用户可以将另一个用户指定为帐户管理员。用户具有嵌套资源。问题:帐户管理员无法访问嵌套资源。
```html
在我的应用程序中,用户可以将另一个用户指定为他们的“账户经理”,而账户经理则可以修改所有用户信息。我定义了以下能力:
```can :manage, User do |user|
user == current_user or user.account_manager == current_user
end
用户还拥有一些嵌套资源(例如:出版物)。我定义了以下权限:
can :manage, Publication do |publication, user|
publication.user == current_user or user == current_user or user.account_manager == current_user
end
在我检查的视图中,我使用以下内容:
can? :update, @publication, @user_we_are_accessing
can? :create, Publication.new, @user_we_are_accessing
。到目前为止,一切都很顺利。我的问题在于控制器。在我的PublicationsController中,我添加了:
load_and_authorize_resource :user
load_and_authorize_resource :publication, :through => :user
。然而,这总是会抛出AccessDenied异常,因为对于发布内容的检查没有将用户对象传递给ability(尝试在ability中检查用户对象显示为nil)。
有什么想法可以实现这个吗?
tl;dr:使用CanCan来授权访问资源。用户可以将另一个用户指定为帐户管理员。用户具有嵌套资源。问题:帐户管理员无法访问嵌套资源。