2013-04-30 88 views
2

我有一個簡單的公告板系統,用rails(和devise)構建。使用cancan讓用戶只管理一些模型

我想添加康康系統,但我有一個問題,定義一些規則。

總之,我的應用程序有一個用戶模型,一個論壇模型和一個ForumModerationModel。 代碼(簡化):

class User < ActiveRecord::Base 
    has_many :forum_moderations, dependent: :destroy, foreign_key: 'moderator_id' 
    has_many :moderated_forums, through: :forum_moderations, source: 'moderated_forum' 

class Forum < ActiveRecord::Base 
    has_many :forum_moderations, dependent: :destroy 

class ForumModeration < ActiveRecord::Base 
    belongs_to :moderated_forum, class_name: 'Forum' 
    belongs_to :moderator, class_name: 'User' 

    validates_uniqueness_of :moderator_id, :scope => [:moderated_forum_id] 
end 

正如你所看到的,用戶可以適度N論壇和論壇可以通過N用戶審覈。 我的問題是:

如何根據這些模型定義cancan,以便用戶只能根據這些模型:manage某些論壇?

我讀過這篇文章: https://github.com/ryanb/cancan/wiki/Defining-Abilities

但因爲我的用戶模型沒有列我可以用這個目的,我堅持。

+0

查看[ROLIFY](https://github.com/EppO/rolify) – Tomanow 2013-04-30 21:24:49

回答

1

據我瞭解,你只需要適當地定義你的條件。您將需要將current_forum變量傳遞給initialize方法,然後使用它來確定current_user是否有權在此論壇上進行審覈。

def initialize(user, current_forum = nil) 
    user ||= User.new # guest user (not logged in) 
    if user.moderated_forums.include?(current_forum) 
    # user is moderator 
    else 
    # user is not moderator 
    end 
end 

可以定義爲current_forum方法before_filter,把你想使用它的控制器或放在ApplicationController並在您不需要這個控制器把skip_before_filter