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. 生産中に異なるdivが生成される
- 3. JButtonが異なるPCで異なって表示される
- 4. GETリクエストによって異なるJSONコンテンツが返される
- 5. 異なるモジュールに異なるwxで作成されたメニュー
- 6. idごとに異なるリンクを生成する
- 7. 異なるグループ
- 8. 異なるリンク
- 9. Vb.net異なるデータベースを異なるグラフにリンクするには
- 10. 異なる方法でアクセスすると、Windowsコントロールによって異なる値が返されます
- 11. 生成されたクエリはEntity Frameworkのバージョンによって異なります
- 12. カテゴリによって異なるWPクエリ
- 13. 識別異なるプロセスによって
- 14. 異なる場合によって句
- 15. ビルドタイプによって異なるライブラリ/インポート
- 16. テーブルインラインスタイルはブラウザによって異なる
- 17. 環境によって異なるactionRequest
- 18. 異なるコンテキストで実行されている同じコードが異なる結果を生成する
- 19. 異なるEnum HashCode生成?
- 20. プロットが作成されるたびに異なるランダムな色が生成される
- 21. 異なるドメインからのGet-Acl
- 22. リンクがオープン異なるコンテンツ
- 23. 同じコードブロックが異なるコールバックによって同時にアクセスされる
- 24. 異なるCakePHPコントローラ "order by"
- 25. 異なる結果:CakePHPの
- 26. 異なるコンパイラで異なる出力を生成するコード
- 27. 2つの異なるグループによるSQLグループ
- 28. tlbimpによって生成されたCOM Wrapperは、OSのバージョンによって異なります。
- 29. 同じルートフォルダにリンクされている異なるドメイン名のrobots.txtの内容が異なります
- 30. laravel route()異なるドメイン名のリンクを生成する
多くのコントローラー(約100個)を持っていて、各コントローラーに5つ以上のメソッドがある場合、パフォーマンスに影響しますか? – Saanch
@gvLearner私が言及したように、ユーザが認証されるとすぐに許可がチェックされるので、ログイン時間に影響します。あなたの場合、AclComponent-> check()メソッドはログイン時に約500回呼び出されます。これは明らかに欠点です。しかし、ログインが完了すると、ほとんどの場合パフォーマンスに影響を与えません(セッション内のアクションリンクとアクセス権を比較するために、いくつかの 'Router'メソッドへのいくつかの呼び出しだけが使用されます)。 – nIcO