我使用CanCan和Permission
模型来管理Folder
模型的权限。
当用户创建文件夹时,我想在文件夹上创建为此用户写入的权限(即创建一个权限记录,其中字段action
设置为'write',知道此权限可能稍后由管理员修改(用户不是他们创建的文件夹的所有者),属于用户和文件夹)。奇怪的是,如果用户是管理员,则不应创建任何权限。
我可以使用Folder
上的回调来完成这项工作,但我不认为直接向模型提供current_user
是一个好主意。
以下是我考虑的选项:
save_and_grant_permission( user, action )
上创建一个Folder
方法来完成工作,将流程包装在一个事务中。问题是我必须记住总是使用它而不仅仅是save
所以我想知道:
更新
目前,我选择了解决方案2并使用了nested_attributes
:
def save_and_grant_permission( user, action )
return save if user.admin?
permission = permissions.where( user_id: user.id ).first
self.permissions_attributes = [
{id: permission.try(:id), user_id: user.id, action: action.to_s}
]
save
end
如果没有更好的解决方案出现在这里,我将关闭问题并将其移至StackExchange :: CodeReview。
答案 0 :(得分:1)
也许您应该以作者的形式为您的文件夹提供对用户的引用。
您可以将权限基于文件夹的作者,例如定义一个after_create回调,为该文件夹的作者创建权限。