私は Rails の認可 gem CanCanがとても気に入っています。しかし、特定の特権に複数の条件があることに気付き、ユーザーがアクセスを拒否された理由に応じて、ユーザーにさまざまなエラー メッセージを表示できるようにしたいと考えています。
CanCan にはそのような動作のメカニズムがありますか? 見つからなくて困っています。それをフォークして、その動作を自分で追加する必要がありますか?
私は Rails の認可 gem CanCanがとても気に入っています。しかし、特定の特権に複数の条件があることに気付き、ユーザーがアクセスを拒否された理由に応じて、ユーザーにさまざまなエラー メッセージを表示できるようにしたいと考えています。
CanCan にはそのような動作のメカニズムがありますか? 見つからなくて困っています。それをフォークして、その動作を自分で追加する必要がありますか?
箱から出してすぐにCanCanでそれを行うことはできないと思います. ユーザーが何かを実行できるかできないかを示す方法を提供するだけです。
Ability複数のサブクラスを定義してパーミッションをチェックすることで、非定型の方法で使用できないかと思います。デフォルトの実装ではAbility、現在のユーザーのインスタンスを作成し、それを問い合わせます。
Abilityチェックしたいさまざまな種類のアクセスを反映するサブクラスのコレクションを作成した場合は、ユーザーが何かを実行できるかどうかを順番に尋ねることができます。最初に許可を拒否したものは、特定のエラー メッセージを生成するために使用されます。
Abilityサブクラスのコレクションを結合current_abilityし、現在のユーザーの能力を返すために CanCan が提供するメソッドでそれを作成するために、包括的な能力クラスを作成するだけで済みます。次に、クラスに同じメソッドcan?とcannot?メソッドを提供することで、通常の機能と同じように機能しますが、それを拡張して、どのサブクラスが許可を拒否しwhy?たかを識別し、別のエラー メッセージを生成するメソッドを提供できます。Ability結果。
実際には、too の新しい実装を提供して、必要なauthorize!エラー メッセージを返すようにする必要があります。
申し訳ありませんが、基本的には長い答えです-自分でやらなければなりません。