【发布时间】:2012-11-02 15:39:56
【问题描述】:
我正在重写一些 Rails 3 应用程序逻辑,我想就我的 DB 建模请你动脑筋。
在我的应用中,用户可以访问页面、组和图片。作为多态关联,这很容易做到:
class Permission < ActiveRecord::Base
belongs_to :resource, :polymorphic => true
belongs_to :user
end
class User < ActiveRecord::Base
has_many :permissions
end
class Page < ActiveRecord::Base
has_many :permissions, :as => :resource
end
# the same for Page and Picture
但是,这些权限也需要有不同的类型,例如 AdminPermission、CollaboratorPermission、OwnerPermission。我该怎么做呢?我希望能够做到这一点:
p = Page.first
u = User.first
u.admin_permissions.create(:resource => p)
# should return AdminPermission class, not just Permission
per = User.first.permissions.first
# should return Page
per.resource
我的问题是:我该如何建模?为每个对象创建一个 Permission 类,而不是在一个类中完成所有这些会更好吗?有这样做的聪明方法吗?我不太喜欢为 Rails 使用角色/身份验证插件,因为它们依赖于用户作为特定角色。在这里,角色随着权限的变化而变化。用户可以是组的管理员,但也可以是图像的协作者。
【问题讨论】:
标签: ruby-on-rails activerecord authorization