我设置了devise和cancan,但是如何使一个用户成为管理员而另一个用户不是管理员呢?
我应该使用omniauth(我只想使用Google登录),还是devise,或者cancan?
# 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
的值:
在你的 User
模型中创建一个便捷方法,以访问 admin
的值:
User
model, create a convenience method to access the value of 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)
add_column :users, :admin, :boolean, :default => true
将默认值 true 改为 false
add_column :users, :admin, :boolean, :default => false
这有点像“由你决定”,但简单的方法只是将布尔属性赋予用户,例如 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
你可以从 devise 和 cancan gem & role 中学到更多。
admin
添加到user
表中。 - zeantsoirails generate migration AddAdminToUser admin:boolean
- Steve Root