【发布时间】: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