2013-04-30 86 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