これについて簡単にコメントできると思いましたが、フィールドが短すぎます。正解ではない場合は申し訳ありませんが、
あなたは魔術について言及しました-それは認証システムであり、承認とは何の関係もないと思います. (私はソーサリージェムの実装を知りません-ドキュメントからのステートメントを繰り返し、説明がそのようなシステムを列挙し、それが有効な定義であると仮定するだけです)。ただのミスだと思います。
自問すべき基本的な質問は...
どの程度の役割ベースのシステムを開発していますか? これが public/private/admin ロールのみの問題である場合は、別の API に移動することを検討する必要があると思います。
状況によっては面倒かもしれませんが、複雑で追加的な役割がない場合は試してみる価値があります。グレープに簡単にマウントすると、問題の OOTB が解決されます。
本当の問題は、拡張可能/動的な役割システムについて考えている場合、または単に DRY になりたい場合です。それは痛いかもしれません;-)。Rayan の Bytes cancan gem 実装は、このような問題をより高い抽象レベルで解決する方法を理解するのに役立つはずです。特定の (より高度な抽象化を伴わない - 動的ロールなど) 実装では、グレープから現在与えられているヘルパーを使用し、その責任をモデルに委譲するだけで問題ありません (基本的な使用法)。
helpers do
def current_user
@current_user ||= User.authorize!(env)
end
def authenticate!
error!('401 Unauthorized', 401) unless current_user
end
end
したがって、すべての話は User.authorize!(env) を実装する方法に関するものであり、それはモデルで行う必要があり、ニーズに厳密に依存すると思います。