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
私の質問は次のとおりです。これをどのようにモデル化できますか? これらすべてを 1 つのクラスで行うのではなく、オブジェクトごとに Permission クラスを作成した方がよいでしょうか? これを行うスマートな方法はありますか?Rails のロール/認証プラグインは、ユーザーが特定のロールであることに依存しているため、あまり好きではありません。ここでは、権限によって役割が変わります。ユーザーはグループの管理者になることができますが、イメージのコラボレーターになります。