【问题标题】:Understanding CanCan Ability and Users了解 CanCan 能力和用户
【发布时间】:2013-04-02 22:17:42
【问题描述】:

我的 Rails 应用程序中有带有 CanCan 支持的 Rails Admin。我对一个问题感到困惑。 CanCan 如何知道登录的用户是什么?例如,我的用户可以具有不同的角色,并且通过 CanCan 我为每个表分配特定访问权限的角色。当我转到localhost:3000/admin 时,我收到了错误

 CanCan::AccessDenied in RailsAdmin::MainController#dashboard 

我的Ability.rb 文件

  def initialize(user)
    if user and user.role.eql? :super_admin
      can :manage, :all                # allow superadmins to do anything
    elsif user and user.role.eql? :admin
      can :manage, [Location, School]  # allow admins to manage only Locations and Schools
    end
  end

那么我该怎么做才能让用户能够登录 Rails Admin?我必须手动创建它吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 cancan rails-admin


    【解决方案1】:

    默认情况下,CanCan 将使用current_user 返回的任何内容。如果您在命名空间中使用 Devise(例如 admin),那么 Devise 实际上将使用 current_admin_user。您可以在 ApplicationController(或其他一些基本控制器)中创建一个返回 current_admin_usercurrent_user 方法,或者用 current_admin_user 覆盖 current_ability 方法来实例化能力。

    (这都是假设您的设计使用命名空间。默认情况下,设计将使用current_user

    【讨论】:

      【解决方案2】:

      您的控制器中需要有一个current_user 方法。假设你有这个,如果你没有签名,你将无权访问当前用户,所以如果你的能力文件不存在,你需要在你的能力文件中分配一个用户。在您的 initialize 方法中,添加 user ||= User.new 以在用户尚不存在时进行分配。

      def initialize(user)
        user ||= User.new
      
        if user and user.role.eql? :super_admin
          can :manage, :all                # allow superadmins to do anything
        elsif user and user.role.eql? :admin
          can :manage, [Location, School]  # allow admins to manage only Locations and Schools
        end
      end
      

      【讨论】:

      • 啊。我认为可能是这样,但无法在文档中验证。谢谢。
      • 没问题,@jason328!很高兴我能帮上忙!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多