【问题标题】:Rails creating users, roles, and projectsRails 创建用户、角色和项目
【发布时间】:2010-12-15 16:47:24
【问题描述】:

我对 Rails 和 activerecord 还很陌生,所以请原谅任何疏忽。

我尝试将 3 个模型绑定在一起(以及第 4 个模型进行实际绑定)以使用用户定义的角色创建权限方案。

class User < ActiveRecord::Base
  has_many :user_projects
  has_many :projects, :through => :user_projects
  has_many :project_roles, :through => :user_projects
end

class Project < ActiveRecord::Base
  has_many :user_projects
  has_many :users, :through => :user_projects
  has_many :project_roles
end

class ProjectRole < ActiveRecord::Base
  belongs_to :projects
  belongs_to :user_projects
end

class UserProject < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
  has_one :project_role
  attr_accessible :project_role_id
end

project_roles 模型包含用户定义的角色名称,以及定义给定角色是否具有特定任务权限的布尔值。我正在寻找一个优雅的解决方案,以便从我的应用程序项目中的任何位置轻松引用它。

我已经为整个应用程序实现了一个角色系统。不过,我真正想要的是用户将能够在每个项目的基础上管理自己的角色。每个项目都会设置一个不可变的默认管理员角色,并且项目创建者会在项目创建时添加。

由于用户正在创建角色,我希望能够通过关联从项目和用户模型中提取角色名称列表(用于显示目的),但为了测试访问,我想简单地引用它们通过他们可以访问的内容,而无需通过名称引用它们。

也许是这样的?

def has_perm?(permission, user) # The permission that I'm testing
  user.current_project.project_roles.each do |role|
    if role.send(permission) # Not sure that's right...
      do_stuff
    end
  end
end

我想我在这个问题上有点不知所措,因为我一直在思考如何最好地实现这一点。

【问题讨论】:

    标签: ruby-on-rails activerecord attributes has-many has-many-through


    【解决方案1】:

    实现这一点的最佳方法是不实现这一点。我建议使用已经创建的众多 gem 之一来帮助您处理用户、角色和权限。例如:

    acl9
    http://github.com/be9/acl9
    

    acl9 为您提供了一个很棒的小 DSL,您可以使用它来为用户添加权限和角色。设置起来真的很容易,并且可以省去您自己编写代码的麻烦。

    acl9 非常适合用于身份验证的许可 (http://github.com/thoughtbot/clearance)。

    【讨论】:

    • 我已经更新了这个问题,希望能澄清一点。我看过一些宝石,它们似乎并不适合。原因是我将无法根据角色的名称引用访问权限,因为我永远不会知道角色的名称是什么。该名称仅用于显示目的。您是否知道可以处理这种行为的 gem 或可能的另一种解决方案?我觉得我已经很接近了,它几乎是功能性的,只是不是很优雅。 :)
    【解决方案2】:

    我同意 jonnii,但我建议你看看 Ryan Bates 的 cancan

    我认为它的实现和使用要简单得多。

    【讨论】:

    • Cancan 不会在数据库中存储用户权限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多