Nao*_*i K 2 ruby-on-rails devise cancan omniauth
我设置了设计和cancan,但是如何让1个用户管理员和其他用户不是管理员?我是否使用omniauth(我只想使用google登录),设计或cancan?
zea*_*soi 16
要在CanCan中使用此特定功能,您需要在Devise User模型上存储一个属性,该属性指示特定用户是否为管理员.
首先在User表上创建一个名为的属性admin:
# from command line
rails generate migration AddAdminToUser user
Run Code Online (Sandbox Code Playgroud)
在迁移中,将admin属性的默认值设置为false(或者true,根据默认情况下要执行的行为):
class AddAdminToUser < ActiveRecord::Migration
def change
add_column :users, :admin, :boolean, :default => true
end
end
Run Code Online (Sandbox Code Playgroud)
运行迁移
# from command line
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
在您的User模型中,创建一个方便的方法来访问以下值admin:
# app/models/user.rb
def admin?
admin
end
Run Code Online (Sandbox Code Playgroud)
然后,在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
Run Code Online (Sandbox Code Playgroud)
记住-在默认情况下,新的User是不是一个管理员.您始终可以通过以下方式为现有用户启用管理员权限:
# from the Rails console
user = User.find(some_number)
user.update_attribute(:admin, true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8943 次 |
| 最近记录: |