Rails_admin与设计

Sna*_*ake 4 ruby-on-rails devise rails-admin

我安装了Rails_admin与设计,我想将/ admin仪表板限制为仅限管理员.目前我的代码看起来像:

config.authenticate_with do
    warden.authenticate! scope: :user
  end

config.current_user_method(&:current_user)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,用户可以进入仪表板,因此我只希望用户表的admin列中具有布尔值true的用户可以访问仪表板.

你怎么建议我这样做?

CWi*_*tty 19

如果您不想使用cancan,您可以这样做:

config.authorize_with do
    redirect_to main_app.root_path unless current_user.try(:admin?)
end
Run Code Online (Sandbox Code Playgroud)

我用它,它工作正常.


Dem*_*gus 6

我建议你使用名为cancancan的授权gem (是cancan的更新版本),它非常易于使用,它可以让你为不同类型的用户提供某些权限.如果你对这个宝石一无所知,我会建议你看看这个有关如何正确使用它的railscast.

因此,在ability.rb文件中安装cancancan gem之后,您只需要执行类似的操作即可限制管理员访问权限

车型/ ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user && user.admin?
      can :access, :rails_admin       # only allow admin users to access Rails Admin
      can :dashboard           
      can :manage, :all
    else
      can :read, :all                   # allow everyone to read everything
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

并且不要忘记告诉rails_admin gem您正在使用cancancan来验证授权

配置/初始化/ rails_admin.rb

RailsAdmin.config do |config|

  ## == Cancan ==
  config.authorize_with :cancan

end
Run Code Online (Sandbox Code Playgroud)

用户"user.admin?" 您必须将其创建到用户模型中的方法,但只有当您拥有一个具有多个用户和用户belongs_to角色的角色模型时,它才会起作用,否则您将需要其他方式来验证角色,因此它将是这样的

车型/ role.rb

has_many :users
Run Code Online (Sandbox Code Playgroud)

车型/ user.rb

belongs_to :role

def admin?
  role_id == 0 # If you have id == 0 for admin
end
Run Code Online (Sandbox Code Playgroud)

另外,我建议您使用角色模型或枚举来轻松管理不同的角色.

我希望它有所帮助:D