我设置了 devise 和 cancan,但是我现在如何让 1 个用户 admin 而其他用户不是 admin?我是使用omniauth(我只想用google 登录)、devise 还是cancan?
问问题
9270 次
4 回答
16
为了让 CanCan 中的这个特定功能发挥作用,您需要在您的 DeviseUser
模型上存储一个属性,该属性指示特定用户是否是管理员。
首先在您的表上创建一个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)
于 2013-09-18T16:16:04.840 回答
2
add_column :users, :admin, :boolean, :default => true
将默认 true 更改为 false
add_column :users, :admin, :boolean, :default => false
于 2014-01-04T04:06:08.390 回答
0
它有点“由你决定”,但简单的只是用户的布尔属性,比如 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
于 2013-09-18T15:58:18.233 回答
0
您可以从 devise 和 cancan gem & role 中了解更多信息
于 2013-12-12T17:20:54.423 回答