私はCanCanがあなたが望むものを処理できると思います。ユーザーが承認したと思われるものについて具体的な情報を提供していないので、私は役に立つと思ういくつかの方法を紹介します。私が言う最初のことは、あなたがあなたの能力ファイルに望むどんなオブジェクトでも渡すことができるということです。これを行うには、次のようにします。あなたが希望のアプリ/モデルで
def ApplicationController < ActionController::Base
def current_ability
@current_ability = CustomAbility.new(pass, in, anything, here)
end
end
をcustom_ability.rbを定義する場合:この場合
def CustomAbility
include CanCan::Ability
def initialize(anything, you, want, here)
...
end
end
を、何も=合格、あなたは= =何をしたい、でここに=ここに。さらに、認可しているリソースでいくつかのメソッドを呼び出すことができます。 CanCanは@resource_nameを読み込み、承認する能力ファイルを入力することで動作します。 RESTfulなルートを仮定して@resource_nameをロードしますが、before_filterを使用して@ resource_nameに格納する(つまり、@userにユーザーを格納する)限り、自分のリソースを簡単にロードできます。
すでに作成されたパラメータを承認するオブジェクト上の特定のメソッドを呼び出すこともできます。たとえば、次のようなことがあります。
def initialize(user)
can :read, Post do |post|
!((post.readable_groups & user.groups).empty?)
end
end
基本的に、そのブロックの行がfalseを返した場合、あなたは無許可になります。唯一の注意点は、ブロックが作成時または新規作成時に実行されないことです。これを回避する方法があります。たとえば、一意性検証を使用してモデルレベルでユーザーあたり1つのポストを実施するとします。前のフィルタを使用して投稿を読み込んでuser_idを設定してから、
can :create, Post, valid?: true
とにかく役立ちます。
出典
2012-01-28 04:01:08
Max
CanCanではお客様のニーズに対応できません。私はOAuthに精通していませんが、うまくいかない理由は考えられません。 – Max
私の研究で見た限りでは、CanCanは非常に伝統的なRBACを対象としています。私は潜在的にすべてのユーザーのためにダイナミックなスコープが必要なので、グループに入れることはできません(少なくとも私のcancanの理解になります) – nambrot
"ダイナミックスコープ"が意味するものは少し不明です。 – Max