如何使用设计和cancan使管理员用户?

Nao*_*i K 2 ruby-on-rails devise cancan omniauth

我设置了设计和cancan,但是如何让1个用户管理员和其他用户不是管理员?我是否使用omniauth(我只想使用google登录),设计或cancan?

zea*_*soi 16

要在CanCan中使用此特定功能,您需要在Devise User模型上存储一个属性,该属性指示特定用户是否为管理员.

首先在User表上创建一个名为的属性admin:

# from command line
rails generate migration AddAdminToUser user
Run Code Online (Sandbox Code Playgroud)

在迁移中,将admin属性的默认值设置为false(或者true,根据默认情况下要执行的行为):

class AddAdminToUser < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, :default => true

  end
end
Run Code Online (Sandbox Code Playgroud)

运行迁移

# from command line
rake db:migrate
Run Code Online (Sandbox Code Playgroud)

在您的User模型中,创建一个方便的方法来访问以下值admin:

# app/models/user.rb    
def admin?
    admin
end
Run Code Online (Sandbox Code Playgroud)

然后,在ability.rb,定义您要为每个用户设置的能力:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin? # Admin user
      can :manage, :all
    else # Non-admin user
      can :read, :all
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

记住-在默认情况下,新的User不是一个管理员.您始终可以通过以下方式为现有用户启用管理员权限:

# from the Rails console
user = User.find(some_number)
user.update_attribute(:admin, true)
Run Code Online (Sandbox Code Playgroud)

  • 我认为迁移应该是:`rails generate migration AddAdminToUser admin:boolean` (2认同)