Rails 4 - 更新用户角色权限

时间:2016-07-30 08:06:18

标签: ruby-on-rails-4 pundit

我正在使用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,然后创建显示角色的新记录。请建议。

1 个答案:

答案 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进行测试,那么此视频非常棒。

希望这会引导你正确地指导你想要完成的事情。