【问题标题】:Rails 4 - Update User Role PermissionsRails 4 - 更新用户角色权限
【发布时间】:2016-12-04 22:28:26
【问题描述】:

我正在使用 Pundit gem 实现具有用户、角色和权限的 rails 4 应用程序。我有 3 个模型用户、角色、角色用户,因为我在用户和角色之间有 many_to_many 关系。我想编辑用户角色。

class User
  has_and_belongs_to_many :roles
end

class role
  has_and_belongs_to_many :users
end

存储 user_id 和 role_id 的第三个表 roles_users。

假设我想编辑一个用户角色,我应该遵循什么方法。我是否应该从第三个表中删除现有记录,即角色用户,然后创建显示角色的新记录。请提出建议。

【问题讨论】:

    标签: ruby-on-rails-4 pundit


    【解决方案1】:

    不确定您是否仍在从事此工作或您到底想要完成什么,但与 pundit 一起处理用户角色的一个好方法是使用 devise 来处理用户配置文件并创建一个管理员帐户。管理员可以将特定用户的角色更改为您可以选择的任何角色(即用户、vip、版主、编辑、管理员等)。您希望应用程序具有多个角色的复杂程度是无限的。在您的用户模型中使用“枚举”将有助于指导您的角色选择:

    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
    

    这样您可以将新用户的默认角色设置为普通用户,然后管理员可以将用户更新为新用户应具有的任何角色。如果您想要一个包含多个公司/组的更复杂的应用程序,这应该能够用于多租户应用程序。然后 Pundit 政策和范围将发挥作用,以确定谁有权在您的应用程序中执行某些操作。例如:

    • 管理员可以查看用户列表
    • 管理员可以更改用户的角色
    • 管理员和编辑可以创建、编辑、删除、更新博客文章
    • 普通用户看不到用户列表
    • 普通用户无法更改其角色
    • 普通用户无法查看(或编辑)其他用户的个人资料
    • 普通用户可以查看(和编辑)自己的用户资料
    • 普通用户无法编辑、删除或更新博文
    • 普通用户可以看到已发布的博文

    一个很好的入门资源是遵循Rails-devise-pundit 示例应用程序,它将引导您通过用户角色很好地进行设置。如果您更直观,可以观看此 YouTube 视频:Rails Authorization with Pundit。如果您还希望在创建用户角色时使用 rspec 进行测试,则此视频非常棒。

    希望这能引导您朝着正确的方向努力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2015-11-26
      • 2018-11-18
      • 2019-04-30
      • 2016-02-27
      相关资源
      最近更新 更多