我正在使用Pundit gem实现的用户,角色,权限的rails 4应用程序。我有3个模型用户,角色,roles_users,因为我在用户和角色之间有很多关系。我想编辑用户角色。
class User
has_and_belongs_to_many :roles
end
class role
has_and_belongs_to_many :users
end
存储user_id和role_id的第3个表roles_users。
因此,假设我想编辑用户角色,我应该遵循什么方法。我应该从第3个表中删除现有记录,即roles_users,然后创建显示角色的新记录。请建议。
答案 0 :(得分:2)
不确定您是否仍在使用此功能或您正在尝试完成的任务,但是使用pundit处理用户角色的好方法是使用设计来处理用户配置文件并创建管理员帐户。管理员可以将特定用户的角色更改为您选择的任何角色(即用户,VIP,主持人,编辑,管理员等)。天空是您希望应用程序具有多个角色的复杂程度的极限。使用" enum"在您的用户模型中将有助于指导您的角色选项:
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
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
这样,您可以将新用户的默认角色设置为常规用户,然后管理员可以将用户更新为新用户应该具有的任何角色。如果您想要一个包含多个公司/组的更复杂的应用程序,这应该可以用于多学科应用程序。然后,权威政策和范围将发挥作用,以确定谁有权在您的应用程序中执行某些操作。例如:
一个很好的入门资源是跟随Rails-devise-pundit示例应用程序,该应用程序将引导您完成与用户角色相关的设置。如果您更具视觉效果,则可以关注此YouTube视频:Rails Authorization with Pundit。如果您在创建用户角色时也希望使用rspec进行测试,那么此视频非常棒。
希望这会引导你正确地指导你想要完成的事情。