【问题标题】:how to make admin users using devise and cancan?如何使用 devise 和 cancan 制作管理员用户?
【发布时间】:2013-09-18 15:29:52
【问题描述】:

我设置了 devise 和 cancan,但我现在如何让 1 个用户 admin 而其他用户不是 admin? 我使用omniauth(我只想用google登录)、devise还是cancan?

【问题讨论】:

  • 到目前为止你运气好吗?

标签: ruby-on-rails devise omniauth cancan


【解决方案1】:

要让 CanCan 中的这一特定功能发挥作用,您需要在您的 Devise User 模型中存储一个属性,该属性指示特定用户是否为管理员。

首先在您的User 表上创建一个名为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不是管理员。您始终可以通过以下方式对现有用户启用管理员权限:

# from the Rails console
user = User.find(some_number)
user.update_attribute(:admin, true)

【讨论】:

  • 您好,非常感谢!就一个问题。如果由于 user.rb 而用户已经存在,为什么要说 add_column :user?为什么不 add_column :admin ?
  • 阅读整行:您正在将admin 添加到 user 表中。
  • 我看到用户是表 admin 是列。
  • 我认为迁移应该是:rails generate migration AddAdminToUser admin:boolean
【解决方案2】:
add_column :users, :admin, :boolean, :default => true

将默认 true 更改为 false

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

【讨论】:

    【解决方案3】:

    它有点“由你决定”,但简单的只是用户的布尔属性,比如 admin = true/false,然后你可以定义能力.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
    

    【讨论】:

    • 您好,谢谢您的回答。是的,我的ability.rb 中有这个,但我如何让用户成为管理员?这部分代码只说明如何处理管理员用户。对不起,我的英语不是很好,这有意义吗?
    • U 将使用 up/down 方法创建迁移,您将使用 add_column 方法为用户表创建此类属性。不要忘记为该列使用默认值。
    【解决方案4】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多