CakePHP 2.0のACLを使用して2つのグループが作成されました。 1人は管理者で、1人は訪問者です。管理者は画像を追加してアップロードすることができ、訪問者は画像を見ることができます。追加または削除をクリックすると、画像を表示できます。ビジターグループのリンクを削除するにはどうすればよいですか? if/else文を使用して、どのグループに属しているかを確認すると、それが最善の解決策になりますか?CakePHP ACLによって異なるグループに異なるリンクが生成される
答えて
ユーザーが実行する権限を与えられていない操作につながるリンクを非表示にするには、ビューは何らかの形でユーザーのアクセス許可を認識する必要があります。 ユーザーが所属するグループをチェックすることで、これらのアクセス許可を確認できますが、これはもはやACL許可に依存しないことを意味します。そのため、ACL権限の更新はすべてコードで報告する必要があります。それほど便利ではありません。
他に何がありますか?アプローチは、通常はログイン時にコントローラのユーザー権限を確認し、セッションでこれらのアクセス許可を保持することです。 セッションのアクセス権をビューで確認して、ビューの一部を表示または非表示にすることができます。このメソッドの例を見つけることができますhere:
しかし、具体的には、リンクをさらに詳しく調べて、ビューにテストを書くことは避けてください。私はHtmlHelperから継承したhelperを使い、link()メソッドをオーバーライドします。 基本的には、同じ考え方で動作します。オーバーライドされたlink()メソッド内では、ターゲットアクションに対するアクセス権がチェックされ、ヘルパーによってリンクが返されます。あなたは私のコードを試してみたい場合は
、あなたのAppControllerでは私のAcl plugin
を使用することができ、権限設定:
var $components = array(..., 'Acl.AclManager');
function beforeFilter()
{
...
//you can put it here as the permissions check is performed only once per session
$this->AclManager->set_session_permissions();
...
}
そして、あなたの意見では、AclHtmlHelper
$this->AclHtml->link(...);
を使用
この方法の原則は、ログイン中にすべての権限がチェックされます。アプリケーションに多くのアクションがある場合、これによりログインがかなり遅くなる可能性があります。
より効果的なアプローチは、必要なときだけ、つまりlink()メソッドが呼び出されたときの各アクションのユーザー権限をチェックすることです。しかし、これは、ヘルパーがAclパーミッション自体をチェックしなければならないことを意味し、これは何とかMVCモデルを壊すでしょう。コアlibでは、Aclチェックはコンポーネントに強く結合されています。
- 1. 異なるグループ
- 2. 異なる方法でアクセスすると、Windowsコントロールによって異なる値が返されます
- 3. 環境によって異なるactionRequest
- 4. 異なるEnum HashCode生成?
- 5. リンクがオープン異なるコンテンツ
- 6. 同じルートフォルダにリンクされている異なるドメイン名のrobots.txtの内容が異なります
- 7. tlbimpによって生成されたCOM Wrapperは、OSのバージョンによって異なります。
- 8. 異なるCakePHPコントローラ "order by"
- 9. Doctrine、異なるファイル名、異なるテーブルの生成
- 10. JavaScriptが有効になっている場合、Webページに異なるリンクを生成するにはどうすればよいですか?
- 11. Ajaxで異なるURLのページが生成されました
- 12. 異なるJson.Netライブラリによって生成されたJsonデータを逆シリアル化する
- 13. グループ化されたテーブルビューのセクションヘッダーの高さが異なる
- 14. ajax呼び出しでブラウザによって異なるエラーが発生する
- 15. asp.netファイルマージ異なる開発者によって行われる
- 16. 複数のグループに異なる色のggplot2ボックスプロットを生成する
- 17. CakePHPはドメインによって異なるレイアウト/データをロードしますか?
- 18. tfsを異なるプロジェクトにリンクする
- 19. 異なるブラウザでウェブページのレンダリングが非常に異なっている
- 20. Crystal Reportsの異なる列にグループを作成する方法
- 21. BaseExpandableList異なる背景を持つ異なるグループ
- 22. 異なるグループの異なる編集フォーム
- 23. 異なるデバイスにインストールされている異なるアプリのサイズ
- 24. なぜ私のテキストエリアのボックスが異なるブラウザで異なって配置されているのですか
- 25. 異なるコンテンツデータベースに異なるドキュメントライブラリを作成する
- 26. ios swift - テーブルビューセルの動的高さ(デバイスによって異なる)
- 27. OpenCL - 異なるカーネル "printf()"が異なるデバイスに出力されますか?
- 28. Grailsはすべて異なるパッケージ/フォルダに生成されますか?
- 29. DOM要素のプロパティがセレクタによって異なる - jQuery
- 30. アンドロイド:状況によってはメニューが異なる
多くのコントローラー(約100個)を持っていて、各コントローラーに5つ以上のメソッドがある場合、パフォーマンスに影響しますか? – Saanch
@gvLearner私が言及したように、ユーザが認証されるとすぐに許可がチェックされるので、ログイン時間に影響します。あなたの場合、AclComponent-> check()メソッドはログイン時に約500回呼び出されます。これは明らかに欠点です。しかし、ログインが完了すると、ほとんどの場合パフォーマンスに影響を与えません(セッション内のアクションリンクとアクセス権を比較するために、いくつかの 'Router'メソッドへのいくつかの呼び出しだけが使用されます)。 – nIcO