0

我使用 CanCan 和Permission模型来管理模型的权限Folder

当用户创建文件夹时,我想为该用户在文件夹上创建写入权限(即创建一个权限记录,字段action设置为“写入”,属于用户和文件夹),知道此权限可能稍后由管理员修改(用户不是他们创建的文件夹的所有者)。奇怪的是,如果用户是管理员,则不应创建权限。

我可以使用回调Folder来完成这项工作,但我认为current_user直接提供给模型并不是一个好主意。

所以这里是我考虑的选项:

  1. 在控制器中完成肮脏的工作。我不太喜欢它,它不干
  2. 制作一种可以完成工作的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。

4

1 回答 1

1

也许您应该以作者的形式为您的文件夹提供对用户的引用。

您可以将您的权限基于文件夹的作者,例如定义一个为文件夹作者创建权限的 after_create 回调。

于 2013-03-19T14:30:04.037 回答