【发布时间】:2013-09-18 15:29:52
【问题描述】:
我设置了 devise 和 cancan,但我现在如何让 1 个用户 admin 而其他用户不是 admin? 我使用omniauth(我只想用google登录)、devise还是cancan?
【问题讨论】:
-
到目前为止你运气好吗?
标签: ruby-on-rails devise omniauth cancan
我设置了 devise 和 cancan,但我现在如何让 1 个用户 admin 而其他用户不是 admin? 我使用omniauth(我只想用google登录)、devise还是cancan?
【问题讨论】:
标签: ruby-on-rails devise omniauth cancan
要让 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)
【讨论】:
admin 添加到 user 表中。
rails generate migration AddAdminToUser admin:boolean
add_column :users, :admin, :boolean, :default => true
将默认 true 更改为 false
add_column :users, :admin, :boolean, :default => false
【讨论】:
它有点“由你决定”,但简单的只是用户的布尔属性,比如 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
【讨论】:
您可以从 devise 和 cancan gem & role 中了解更多信息
【讨论】: