【问题标题】:Best way to model users that have roles with differing attributes in Rails?在 Rails 中为具有不同属性的角色的用户建模的最佳方法是什么?
【发布时间】:2011-05-28 22:32:36
【问题描述】:

我是 Rails 菜鸟,希望有人能帮助我解决这个问题。我有一个应用程序,它有一个用户模型,使用 Authlogic 进行身份验证,使用 CanCan 进行授权。共有三个角色:消费者、业务和管理员。一个用户可以拥有任意数量的这些角色。

不过,企业还有其他属性,我需要对此进行建模,以便我可以添加每个角色可能具有不同属性的角色。本能告诉我,我需要有一个单独的模型来表示每个角色的属性,即 BusinessRoleProfile、ConsumerRoleProfile 等,然后可能以编程方式混合一个模块,将适当的 has_one 引用添加到配置文件模型中。

这是处理单独属性的最佳方式吗?如果是这样,有人可以指导我如何根据用户的角色动态包含这些 mixin 吗?

【问题讨论】:

    标签: ruby-on-rails-3 model authlogic roles cancan


    【解决方案1】:

    编辑:

    做了一些更多的研究,这可能会对你有所帮助。 https://github.com/thefrontiergroup/scoped_attr_accessible

    看起来您可以执行以下操作:

    class User < ActiveRecord::Base
    
      # All attributes are accessible for the admin scope.
      attr_accessible :all, :scope => :admin
    
      # The default scope can only access a and b.
      attr_accessible :a, :b
    
      # Make both :c and :d accessible for owners and the default scope
      attr_accessible :c, :d, :scope => [:owner, :default]
    
      # Also, it works the same with attr_protected!
      attr_protected :n, :scope => :default
    
    end
    

    旧答案

    看起来它可能会出现在 CanCan 2.0 中。

    https://github.com/ryanb/cancan/issues/326

    【讨论】:

    • 角色具有将存储在数据库中的真实属性,即具有业务角色的用户将具有描述其业务名称的 business_name 属性。我不想要一个充满属性的用户表,这些属性仅与用户的子集相关。我不认为虚拟属性是这种情况下的答案。
    • 该功能是关于基于模型中的属性控制访问。我通过 CanCan 获得了我想要的受控访问权限,我只是在征求有关如何为我的用户建模的建议,因为某些角色具有其他角色没有的属性。
    • 刚刚找到一个可以帮助您的插件,请参阅修改后的答案。如果这对您没有帮助,那么希望有人会知道答案:)
    猜你喜欢
    • 2016-10-24
    • 2020-11-26
    • 2014-07-30
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 2011-05-15
    相关资源
    最近更新 更多