【问题标题】:CanCan Nested Resource Controller AuthorizationCanCan 嵌套资源控制器授权
【发布时间】:2011-04-03 11:21:37
【问题描述】:

在我的应用程序中,允许一个用户指定另一个用户作为他们的“客户经理”,并且允许客户经理修改所有用户信息。我定义了以下能力:

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 授权对资源的访问。用户可以指定另一个用户作为客户经理。用户有嵌套资源。问题:客户经理无法访问嵌套资源。

【问题讨论】:

    标签: ruby-on-rails cancan


    【解决方案1】:

    我通过以下方式解决了这个问题:

    1) 将 load_and_authorize_resource :publication 替换为仅加载资源 load_resource :publication
    2) 在 load_resource 调用之后添加了before_filter :authorize,实现如下:

    def authorize
        raise CanCan::AccessDenied unless can? :manage, @publication, @user
    end
    

    这行得通,但我希望有一种方法可以通过设计方式解决这个问题,如果有这样的事情的话。感谢您的想法和反馈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多