いくつかのdeviseモデルの能力を定義する方法は?CanCanを複数のデバイスモデルと統合するには?
答えて
あなただけのクラスを確認することができますので、現在のユーザーモデルは、Ability#initialize
に渡されます。
class Ability
include CanCan::Ability
def initialize(model)
case model
when Admin
can :manage, :all
when User
can :create, Comment
can :read, :all
else
can :read, :all
end
end
end
これは私のために働いた -
class Ability
include CanCan::Ability
def initialize(user)
if user.is_a?(Admin)
can :manage, :all
elsif user.is_a?(User)
can :create, Comment
can :read, :all
else
can :read, :all
end
end
end
はのは、あなたのアプリケーションは、2つの別々のDevise-を持っていると仮定しましょうUser
とAdmin
と呼ばれる強力なユーザーモデルです。これは、current_user
とcurrent_admin
のようなメソッドを並べて使用することを意味します。
レッツさらにこれは、他の人が提案した、まさにですが、あなたがする必要がある別のステップがあります
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
case user
when User
can :create, Comment
can :read, :all
when Admin
can :manage, :all
end
end
end
...あなただけの/すべてのカンカン権限設定を含む単一のAbility
クラスを、希望していることを前提としてい取る。
デフォルトでは、CanCanはメソッドcurrent_user
が存在するとみなし、Ability
の設定と比較するUserオブジェクトを返します。ただし、管理者のユーザーはcurrent_admin
を使用して見つけることができます。 CanCanに管理オブジェクトを見つける場所を知らさずに、彼らは見直されることは決してないので、決して許可を得ることはできません。 管理者を扱うときは、デフォルトを変更する必要があります。
は1つが利用可能な場合は今私達の能力クラスは、管理オブジェクトを見ていきますと、何も存在しない場合、通常のユーザーに頼る... application_controller.rb
に
def current_ability
if admin_signed_in?
@current_ability ||= Ability.new(current_admin)
else
@current_ability ||= Ability.new(current_user)
end
end
を次の行を追加します。
さらなる開発が...詳細については
def current_ability
if admin_signed_in?
@current_ability ||= AdminPowers.new(current_admin)
else
@current_ability ||= Ability.new(current_user)
end
end
、ウィキでChanging Defaultsを参照してください、私たちは自分自身の個別の能力クラスに管理者権限を移動することができます。適切な記事を私に指摘するためのStefanへの名誉。
FYI - CanCanは死んでいる、長いライブCanCanCan!最新のバグ修正と新機能同じネームスペースなので、Gemfileのドロップイン宝石の代替品に過ぎません。
gem 'cancancan', '~> 1.8'
検索した後についに完全な答えが見つかりました – coderVishal
- 1. Rails 3 - Active_adminとCanCanの統合
- 2. 複数のデバイスモデルを持つレールパスレット
- 3. STSとSpringの統合複数のxmlファイルと統合された統合グラフ
- 4. 複数の変数と関数を統合する
- 5. 複数のAndroidアプリを統合する
- 6. 複数のUPDATEクエリを統合する
- 7. 複数のIDPとOktaの統合
- 8. Windowsシェル複数のファイルとの統合
- 9. 複数のスクラムコード統合
- 10. 統合複数の機能
- 11. バネ統合 - 複数のゲートウェイ
- 12. 複数のワークシートにユーザーフォームを統合
- 13. レールとcancanで複数の管理アプリケーションを開発するには?
- 14. 複数のレールを統合する方法アプリケーションと共有リソース
- 15. 複数のカスタムマーカーをIonic 2 + Googleマップと統合する
- 16. 複数のワークブックの複数のシートを1つのワークブックに統合する
- 17. デバイスモデル名を取得するには?
- 18. Mailchimpは複数のドロップダウンメニューをHTMLフォームに統合します
- 19. Excel複数のワークブックを統合
- 20. Python:100個の関数と統合変数に渡って統合する
- 21. 複数のプロジェクトを単一のアプリケーションに統合する
- 22. 複数の巨大な.accdbファイルを1つに統合する
- 23. 複数ページのPHPアプリケーションにWebpackを統合する方法
- 24. 複数のShiroレルムをSpringブート環境に統合するJava
- 25. 複数のターゲットプラットフォームに対する統合テストを実行
- 26. 複数のLuisモデルをボットフレームワークに統合する方法
- 27. 郵便受け統合テストとTeamCityを統合するには
- 28. 複数のjavascriptアプリケーションの統合
- 29. Azureログ統合用の複数のストレージアカウント
- 30. 春の統合複数のエンドポイント
ありがとうStefan。残念ながら、それは動作していないようです。ユーザーケースのみが適用されますが、管理者は適用されません。私が管理者としてログインするときは、ゲスト特権しかありません。おそらく私は間違ったことをしているのですが、私は理解できません。 – user1464499
あなたの管理者に 'Ability#initialize'が呼び出されていない可能性があります。ロギングを追加し、[デフォルトの変更](https://github.com/ryanb/cancan/wiki/Changing-Defaults)をチェックしてください。 – Stefan