generate controller
毎回必要なコードを使い始めました。ただし、多くの場合、これは私が現在これらのコントローラーに加えている唯一の変更であり、毎回同じものです。より「優雅」に感じるよりエレガントな方法がなければなりません。
何をするにしても、どこにでもコードをコピーして貼り付けないでください。それはGrailsとは何の関係もありません。ただそれをしないでください。あなたがそれをするたびに、神は子猫を殺します。
あなたがしていることについての詳細を知らずに言うのは難しいですが、私はいくつかのオプションを見ることができます
1)エンティティをデータベースから除外する必要がある場合は、エンティティをロードすると、ユーザーと一緒にセッションに入れることができます。基本コントローラークラスにコードを記述してセッションにアクセスし、「現在の」モデルインスタンスを取得してから、すべてのコントローラーにそのコントローラーを拡張させることができます。または、オプションで、セッションアクセスコードをある種のヘルパーに配置することもできます。
2)1の問題は、スケーリングがうまくいかないことです。保持する必要のあるオブジェクトがたくさんある場合は、それらをセッションに入れません。この場合、あなたはあなたのデザインを見る必要があります。本当にインスタンスをセッションに保持する必要がありますか?ユーザーが変更中のオブジェクトを所有しているかどうかを確認する場合は、その確認をサービスメソッドに入れることができます。したがって、編集をチェックする場合、サービスが最初に行う必要があるのは、ユーザーがa)インスタンスを変更するために必要な役割を持っているかどうか(セキュリティを使用している場合)、およびb)ユーザーがインスタンスを所有しているかどうかをチェックすることです(またはそれ以外の場合)変更できます)。
コメントに基づいて編集
まず、Spring Securityプラグインを使用している場合は、現在のユーザーを簡単に取得できます。
このルートを使用する場合は、ユーザーを取得するすべてのコントローラー/サービスにセキュリティサービスを注入する必要があります。
次に、そうでない場合は、SessionHelper
静的メソッドを含むクラスを作成して、すべてのセッション操作コードを1か所にまとめる必要があります(Spring Securityにもこのようなヘルパーがあります)。これを行うと、いつでも現在のユーザーを取得できるワンライナーになります。
最後に、サービスレイヤーにユーザーを配置する必要があります。サービスは、永続インスタンスのすべての操作を実行する必要があります。ユーザーが自分のアイテムにしかアタッチできない場合、これは、特定のことに対して間違ったユーザーを取得することによって発生する可能性のあるエラーにも役立ちます。