CanCan とPermission
モデルを使用して、モデルの権限を管理していFolder
ます。
ユーザーがフォルダーを作成するときに、このユーザーのフォルダーへの書き込み権限を作成したいaction
(つまり、ユーザーとフォルダーの両方に属し、フィールドが「書き込み」に設定された権限レコードを作成する)。後で管理者が変更できます (ユーザーは、作成したフォルダーの所有者ではありません)。奇妙なことに、ユーザーが管理者の場合、パーミッションは作成されません。
コールバックを使用Folder
して仕事をすることもcurrent_user
できますが、モデルで直接利用できるようにすることは良い考えではないと思います。
だからここに私が検討するオプションがあります:
- コントローラーでダーティジョブを作成します。私はそれがあまり好きではありません、それはDRYではありません
- プロセスをトランザクションにラップして、ジョブを実行する
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 に移動します。