我有一个使用 rails(和设计)构建的简单公告板系统。
我想将 cancan 添加到系统中,但我在定义一些规则时遇到了问题。
简而言之,我的应用程序有一个 User 模型、一个 Forum 模型和一个 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
个用户管理。
我的问题是:
如何定义用户只能根据这些模型:manage
某些论坛?
我读过这篇文章: https://github.com/ryanb/cancan/wiki/Defining-Abilities
但由于我的用户模型没有可用于此目的的列,我被卡住了。
最佳答案
据我了解,您只需正确定义您的条件即可。您需要将 current_forum 变量传递给初始化方法,然后使用它来确定 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
方法并放入您想要使用它的 Controller 或放入ApplicationController
并放入skip_before_filter
在 Controller 中你不需要这个。
关于ruby-on-rails - 使用 cancan 让用户只管理一些模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307468/