【问题标题】:Rails Devise - Admin role, model vs attributeRails Devise - 管理员角色、模型与属性
【发布时间】:2013-11-04 10:25:37
【问题描述】:

我知道如何创建管理员角色/用户:https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role

我想知道的是,在决定这两个选项时是否有任何优点或缺点需要考虑。谁能提供任何关于这方面的见解?

【问题讨论】:

    标签: ruby-on-rails ruby devise


    【解决方案1】:

    让我稍微混淆一下水。我更喜欢通过Role 表和连接表UserRole。这样我就可以定义多个角色,而无需向 db 添加另一列/表。

    class User
      has_many :user_roles
      has_many :roles, :through => :user_roles
    
      def role?(role)
        role_names.include? role
      end
    
      def role_names
        @role_names ||= self.roles.map(&:name)
      end
    
      def role=(role)
        self.roles << Role.find_or_create_by_name(role)
      end
    end
    
    class UserRole 
      # integer: user_id, integer: role_id
      belongs_to :user
      belongs_to :role
    end
    
    class Role
      # string: name
      has_many :user_roles
      has_many :users, :through => :user_roles
    end
    

    【讨论】:

    • 我喜欢这个概念,因为如果需要,它会增加很多灵活性。当然相反,它会增加复杂性...
    • 那么,理论上,当使用这种方法时,可以组合不兼容的角色,对吗?
    【解决方案2】:

    这实际上取决于您希望使用您的管理员角色做什么。我会说第一个选项有点安全,因为管理员角色本身就是一个独特的模型。

    第二个选项很简单,可以帮助您以最少的努力开始工作。但是,如果您的用户知道布尔变量和设置它的方法,任何用户都可以成为管理员并访问您不希望他们访问的区域。

    【讨论】:

      猜你喜欢
      • 2015-07-24
      • 2011-09-26
      • 2011-10-24
      • 2012-05-04
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      相关资源
      最近更新 更多