在我的应用程序中,允许用户指定另一个用户作为他们的“客户经理”,并且允许客户经理修改所有用户信息。我定义了以下能力:
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,因为发布检查没有将用户对象传递给能力(试图检查能力中的用户对象显示为零)。
有什么想法可以实施吗?
tl;dr:使用 CanCan 授权对资源的访问。用户可以指定另一个用户作为客户经理。用户有嵌套资源。问题:客户经理无法访问嵌套资源。