亲爱的所有人(尤其是 Ryan,感谢您所做的出色工作),我对一些可能真的很愚蠢的事情完全发疯了,但对于我的一生,我无法用我的大脑来解决它。
我正在尝试使用 Can Can 进行授权,并且我在除此之外的所有内容上都正确设置了它(这是我的问题,在一个特定的事情上,显然工作正常,但我不确定我是否做得对或不是 - 实际上我认为我无法证明它不能正常工作)。
让我们看看我是否能够清楚地解释我在做什么:
我有两个模型(用户和相册),它们通过第三个模型共享连接:
(A) 用户模型
has_many :albums, :dependent => :destroy # ownership
has_many :shares, :foreign_key => "shared_user_id" #, :dependent => :destroy
has_many :shared_albums, :through => :shares
(B) 专辑型号
belongs_to :user
has_many :shares, :foreign_key => "shared_album_id", :dependent => :destroy
has_many :shared_users, :through => :shares
(C) 共享模式
belongs_to :shared_user, :foreign_key => "shared_user_id", :class_name => "User"
belongs_to :shared_album, :foreign_key => "shared_album_id", :class_name => "Album"
现在,在我的能力课程中,我想做的是限制特定用户在 (C) 共享模型上可以执行的操作。
在我的应用程序中,用户可以创建一个相册,然后他可以将其他用户添加到该相册(此用户是唯一可以访问特定相册的用户)。此外,相册中的每个用户也可以添加新用户。
所有这些都是为相册中的用户提供创建共享的能力(共享模型将用户和相册模型相关联)。
现在最大的问题是,我如何限制添加(创建)共享到特定相册的能力,仅限于属于该相册一部分的用户(通过共享)?
例如,如果我有:
users => id (1,2,3,4) [我的应用中总共有 4 个用户)
专辑 => id (45,32) [我的应用中总共有 2 张专辑)
分享 => (album 45 => [user (1,2,3)] ; album 32 => [users(1,4)]) [我的应用中共有 5 个分享]
我怎么能在能力类中说,在专辑 32(例如)上,只有用户 1 和 4 可以添加(创建)新共享(添加新用户),而用户 2 或 3 他们不能?
我已经限制了用户 2 和 3 访问资源专辑 32 的能力(我在专辑类级别上这样做了),但我想确保无论出于何种原因,创建用户的能力也受到限制。
到目前为止,我的能力课程中拥有的是:
def initialize(user)
(A) ALBUM LEVEL
# (1) Every User can create Album, without restrictions
can :create, Album
# (2) Only the user that own the Album can manage it
can :manage, Album, :user_id => user.id
# (3) The Album can be read by all the users that are part of that specific album
can :read, Album, :shares => {:shared_user_id => user.id}
# (4) The Album can be read by every user if the privacy attribute is false
can :read, Album, :privacy_setting => false
(B) SHARE LEVEL
# (1) Only the user that own the Album can manage all the shares for the album
can :manage, Share, :shared_album => {:user_id => user.id}
# (2) The other users (in the album), can just manage themself (their share)
can :manage, Share, :shared_user_id => user.id
# (3) The Share in the album can be read by every user if privacy is false (just read)
can [:read], Share, :shared_album => {:privacy_setting => false}
cannot [:create,:destroy,:delete], Share, :shared_album => {:privacy_setting => false}
#### (X) CRUCIAL POINT CREATE NEW SHARE
can :create, Share, :shared_album => {:shared_users => {:id => user.id}}
end
(X)CRUCIAL POINT 中的条件是否是正确的条件,只允许已经是相册一部分的用户向相册添加新用户???
这完全让我发疯。
感谢大家,特别是感谢谁能让我对这一切有更多的了解。
最好的迪努斯