いくつかの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. Windowsシェル複数のファイルとの統合
- 3. 複数のスクラムコード統合
- 4. 複数のワークシートにユーザーフォームを統合
- 5. 複数のレールを統合する方法アプリケーションと共有リソース
- 6. Mailchimpは複数のドロップダウンメニューをHTMLフォームに統合します
- 7. 複数の巨大な.accdbファイルを1つに統合する
- 8. 複数のjavascriptアプリケーションの統合
- 9. 統合テストでの複数のアサート
- 10. USBデバイスモデル
- 11. 複数のサービスによるGrailsの統合テスト
- 12. 複数のマシン間で統合テストを実行する
- 13. 複数のHTTP REQUEST(データ統合)を作成する方法
- 14. 複数のASP.Net Webサイトを統合する
- 15. 複数のファイルから合計統計を計算する
- 16. 重複する行を統合する
- 17. 複数のプロジェクト/言語/環境との継続的な統合
- 18. 複合C1 - nopCommerce統合
- 19. iOSとtwitterの統合 - 複数のユーザーのステータスを取得する
- 20. 汎用型統合:複数パラメータ(T、T)対複数パラメータリスト(T)(T)?
- 21. エミュレータとテストツールを統合するには?
- 22. GWTとSpringを統合するには?
- 23. Facebookとアプリを統合するには?
- 24. CKEditorとHerokuを統合するには?
- 25. MeteorとExt.jsを統合するには?
- 26. WordpressとCakephpを統合するには?
- 27. cakephpとmagentoを統合するには?
- 28. 複数のLDAPユーザーデータを1つのLDAPに統合
- 29. 複数のビジュアルスタジオアプリケーションを1つのソリューションに統合
- 30. 複数のDynamics AXレポートを1つに統合
ありがとうStefan。残念ながら、それは動作していないようです。ユーザーケースのみが適用されますが、管理者は適用されません。私が管理者としてログインするときは、ゲスト特権しかありません。おそらく私は間違ったことをしているのですが、私は理解できません。 – user1464499
あなたの管理者に 'Ability#initialize'が呼び出されていない可能性があります。ロギングを追加し、[デフォルトの変更](https://github.com/ryanb/cancan/wiki/Changing-Defaults)をチェックしてください。 – Stefan