2016-05-18 5 views
0

ここで最初の質問は、私は特定で馬鹿ではないと思っています。 私はRailsとAdminUserにも新しく、current_userが特定のタイプ(私の場合はLektor)である場合にのみ、メニュー項目を表示するコントローラを作成したいと思います。AdminUserの条件付きアクションアイテムを無効にする

私はこのような何かを書いた:しかし、それは動作しません

disallowed_actions = [] 
    disallowed_actions << :create if proc {current_admin_user.departments.to_a[0].name != "Lektor" } 
    actions :all, :except => disallowed_actions 

を、と私はprocの中を参照してくださいcurrent_admin_userは、コントローラの同じではありませんので、それはだと思うが、私はすることもできますメソッドまたはプロシージャの外部のcurrent_admin_userを参照していません。 提案がありますか?

+1

current_admin_userはどのように定義されていますか? Deviseのようなものを使って認証を扱っているのですか、自分で定義しましたか? – margo

+0

実際にはcurrent_admin_userはactiveadminから来ており、他のプログラマーから受け取ったプロジェクト(これ以上は手に届かない)に取り組んでいるため、私自身は認証/部門システムを構築していません。 – bacq

+0

上記のコードはどこに置いていますか、より多くのコンテキストを提供できますか? –

答えて

0

移行を作成するには、rails g migration AddRoleToUsers role:stringを実行してユーザーに役割を追加します。 User.first.update_attributes(:role => 'admin')これを実行しcは、あなたのレールに移行bundle exec rake db:migrate

はデシベルで最初のユーザーに「管理者の役割を追加します。お使いのユーザーモデル(user.rb)で

このメソッドを作成:あなたは、通常のユーザーからのアクションを非表示にする(あなたはERBを使用していると仮定)ビューで今

def admin? 
    role == 'admin' 
end 

はこれを追加します。

<% if current_user.admin? %> 
    # show stuff 
<% end %> 

注:あなたが工夫使用していない場合は CURRENT_USERは、方法を工夫で、あなたがセッションであることを行うことができ、ユーザーに署名し、現在を確認するために、独自の方法をロールバックする必要があります。

あなたが管理者でないユーザーにコンテンツを隠すことができるようにRails: where does the infamous "current_user" come from?

を参照してください。

+0

ありがとう、それは良い解決策(私はすでに役割の代わりに部署があります)が、私の問題は、私が明示的に表示されていないメニュー項目のボタンを隠すことです。だから私は(私は)erbでボタンを隠すことができないと思う(それは私の問題で、なぜコントローラーからそのアクションを許可しないのか)。 – bacq

+0

ああ、部門も同様に機能するはずです。それはちょうど名前です。コントローラの操作を無効にしたい場合は、権限を使用してください。私はPundit https://github.com/elabs/punditをお勧めします。これは非常に優れており、ユーザー部門などに基づいてコントローラーのアクションを承認することができます。また、2つの世界(コントローラーアクションとビューでの承認)から最大限の効果を得るためにビューを承認することもできます。 – bntzio

+0

申し訳ありませんが、役に立たないと思います。これは私が以前に持っていたのと同じ問題に繋がります。コントローラー内のメソッドの外側からcurrent_userに対処できません。または方法がある場合、私は単にそれを知らない。 – bacq

関連する問題