I used RailsApps Rails-composer创建一个 Rails-devise-pundit 入门应用程序。我对 Ruby on Rails 还有点陌生,对 pundit 和 Rails 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
在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
Does pundit或设计以某种方式创建此方法?我已经在专家文档中看到过它的使用,但它只是将其用作示例。它没有说需要创建该方法或处理它。它是否以某种方式使用具有 :admin 作为可能值的角色枚举?如果有人能解释这是如何工作的,我将不胜感激。
我计划很快添加使用 rolify gem 来处理角色,而不是用户类中的角色枚举。也许由于某种原因我会想要制作完全不同的角色名称。我想确保我了解如何让一切正常运转。谢谢。