我使用 CanCan 和Permission
模型来管理模型的权限Folder
。
当用户创建文件夹时,我想为该用户在文件夹上创建写入权限(即创建一个权限记录,字段action
设置为“写入”,属于用户和文件夹),知道此权限可能稍后由管理员修改(用户不是他们创建的文件夹的所有者)。奇怪的是,如果用户是管理员,则不应创建权限。
我可以使用回调Folder
来完成这项工作,但我认为current_user
直接提供给模型并不是一个好主意。
所以这里是我考虑的选项:
- 在控制器中完成肮脏的工作。我不太喜欢它,它不干
- 制作一种可以完成工作的
save_and_grant_permission( user, action )
方法Folder
,将流程包装在事务中。问题是我必须记住要始终使用它,而不仅仅是save
所以我想知道:
- 如果有其他选择
- 在这种情况下,最佳做法是什么
更新
现在,我选择了解决方案二并使用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。