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

时间:2013-09-18 15:29:52

标签: ruby-on-rails devise omniauth cancan

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

4 个答案:

答案 0 :(得分:16)

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

首先在名为User的{​​{1}}表格上创建一个属性:

admin

在迁移中,将# from command line rails generate migration AddAdminToUser user 属性的默认值设置为admin(或false,具体取决于您希望默认设置的行为):

true

运行迁移

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

  end
end

# from command line rake db:migrate 模型中,创建便捷方法以访问User的值:

admin

然后,在# app/models/user.rb def admin? admin end 中,定义您要为每个用户设置的能力:

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 是管理员。您始终可以通过以下方式为现有用户启用管理员权限:

User

答案 1 :(得分:2)

add_column :users, :admin, :boolean, :default => true

将默认值true更改为false

add_column :users, :admin, :boolean, :default => false

答案 2 :(得分:0)

它的“由你决定”,但简单只是对用户的布尔属性,如admin = true / false,然后你可以定义ability.rb之类的东西:

class Ability
  include CanCan::Ability

  def initialize(user)
    # Define abilities for the passed in user here. For example:
    #
    #   user ||= User.new # guest user (not logged in)
    #   if user.admin?
    #     can :manage, :all
    #   else
    #     can :read, :all
    #   end
  end
end

答案 3 :(得分:0)