我有一个 Ruby on Rails 应用程序,其中包含users
,articles
和collaborations
. 以下是关系:
User has_many :articles
User has_many :collaborations
Article belongs_to :users
Article has_many :collaborations
# Collaboration has collaboration.id collaboration.user_id and collaboration.article_id.
Collaboration belongs_to :users
Collaboration belongs_to :articles
通过协作,我成功地访问了用户和文章,因此我认为我的应用程序中的所有内容都已正确设置。好的,关于问题。
我正在使用CanCan的角色:admin
。基本上我只希望:admin
能够创建帖子和协作,并且我也可以正常工作。问题是......我如何将该角色写入我的ability.rb
文件,以便非管理员用户仍然可以在他们参与协作的文章上进行协作?”
- 用户 A(管理员)创建文章 X
- 用户 A 与用户 B 在文章 X 上创建协作
- 用户 B 登录但只能编辑和更新文章 X
我应该怎么写ability.rb
。就像我想说以下内容一样:“不是管理员的用户可以在他们参与该文章的协作时管理文章。”
对不起,我还没有喝咖啡:)。这是我的ability.rb
。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
if user.role == "admin"
can :manage, :all
else
can :read, Article
# this is where I want to say: can :manage if part of collaboration for article
end
end
end