我设置了设计和cancan,但是如何让1个用户管理员和其他用户不是管理员? 我是否使用omniauth(我只想使用google登录),设计或cancan?
答案 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)