Mik*_* F. 3 ruby-on-rails devise pundit railsapps
我使用RailsApps rails-composer创建了rails- devise-pundit starter应用程序.我仍然对铁轨上的红宝石有点新意,而且更新设计,专家和导轨4.
我正在查看代码以了解它是如何工作的.控制器和策略类中有很多地方user.admin?叫做.但我找不到管理员?方法.我希望它在用户模型中,但它不存在.这是用户类:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
enum role: [:user, :vip, :admin]
after_initialize :set_default_role, :if => :new_record?
def set_default_role
self.role ||= :user
end
end
Run Code Online (Sandbox Code Playgroud)
在users_controller.rb的一部分中使用:
def show
@user = User.find(params[:id])
unless current_user.admin?
unless @user == current_user
redirect_to root_path, :alert => "Access denied."
end
end
end
Run Code Online (Sandbox Code Playgroud)
权威或设计是否会以某种方式创建此方法?我已经看到它在专家文档中使用,但它只是以它为例.它没有说明需要创建方法或者它处理它.它是否以某种方式使用角色枚举,其中:admin作为可能的值?如果有人能解释这是如何工作的,我会很感激.
我打算尽快添加使用rolify gem来处理角色,而不是用户类中的角色枚举.也许我会因为某些原因想要制作完全不同的角色名称.我想确保我理解如何保持一切正常.谢谢.
角色在app/models/User.rb文件(User模型)中定义.
class User < ActiveRecord::Base
.
.
.
enum role: [:user, :vip, :admin]
after_initialize :set_default_role, :if => :new_record?
def set_default_role
self.role ||= :user
end
end
Run Code Online (Sandbox Code Playgroud)
该应用程序使用ActiveRecord enum方法来管理角色.ActiveRecord提供了查询角色属性的便捷方法:
user.admin! # sets the role to "admin"
user.admin? # => true
user.role # => "admin"
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅ActiveRecord :: Enum的文档.ActiveRecord enum方法是Rails 4.1中的新方法.
我已经更新了rails-devise-pundit应用程序的README 以包含此信息.它也包含在我的Rails Pundit教程中.
| 归档时间: |
|
| 查看次数: |
4040 次 |
| 最近记录: |