0

我的 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?我必须手动创建它吗?

4

2 回答 2

2

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

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

于 2013-04-02T22:26:44.700 回答
1

您需要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
于 2013-04-02T22:24:32.573 回答