メニューの権限の問題?

WBOY
WBOYオリジナル
2016-07-06 13:52:291322ブラウズ

要件は次のとおりです。各ユーザーは異なる権限を持っています。最初に第 1 レベルのメニューが表示され、次に特定の第 1 レベルのメニューの下にマウスを移動すると、対応する第 2 レベルのメニューが表示されます。レベルメニューが表示されます。このウェブサイトでは、上部、中央、左の 3 つの iframs が使用されており、メニューは上部にあります。私は 2 つのオプションを考えましたが、両方とも不足していると感じました。

1 つ目は、ユーザーが Web サイトに入ると、すべてのメニュー権限のリストが取得され、2 次元配列が形成されます。ただし、これの欠点の 1 つは、アクセス許可を変更した後、Web サイトが更新されない限り、すぐに更新できないことです。

2 番目の方法は、ユーザーが Web サイトに入ると、最初に第 1 レベルのメニューを取得し、次に第 1 レベルのメニューをクリックまたはスライドすると、ajax を使用して対応する第 2 レベルのメニューを取得するというものです。このようにして、第 2 レベルのメニューの権限はすぐに更新できますが、第 1 レベルのメニューは常に更新できるわけではありません。

まだいくつかの問題があります。つまり、彼は表示されるメニュー リストをクリックするのではなく、URL を入力するので、それを防ぐ方法がありません。私が考えた 1 つの解決策は、コントローラーがパブリック コントローラーを継承することです。 、およびサーバー内のアクセス許可を確認するためのパブリック コントロール。

普段はどのように対処していますか?

追記: この質問をしたとき、大まかなプロセスは理解できましたが、細かい点で不明な点が 1 つありました。ご回答ありがとうございます。私が理解した内容を以下に記載します。今後このような問題に遭遇する学生に参考にしていただければ幸いです。

    役割と権限の関連付けテーブル
  1. 管理者と役割の関連付けテーブル
  2. コントローラーとメソッドの組み合わせは権限テーブル(例:ユーザー/インデックス)に保存されます
  3. コントローラーはパブリックコントローラーを継承し、初期化メソッドで権限検証を実行し、現在のURLを取得して分割してコントローラーとメソッド部分のユーザー/インデックスを取得し、権限IDを取得します
  4. ユーザーが自分のロールを取得したら、そのロールにこの権限 ID があるかどうかを確認してください。
返信内容:

要件は次のとおりです。各ユーザーは異なる権限を持っています。最初に第 1 レベルのメニューが表示され、次に特定の第 1 レベルのメニューの下にマウスを移動すると、対応する第 2 レベルのメニューが表示されます。レベルメニューが表示されます。このウェブサイトでは、上部、中央、左の 3 つの iframs が使用されており、メニューは上部にあります。私は 2 つのオプションを考えましたが、両方とも不足していると感じました。

1 つ目は、ユーザーが Web サイトに入ると、すべてのメニュー権限のリストが取得され、2 次元配列が形成されます。ただし、これの欠点の 1 つは、アクセス許可を変更した後、Web サイトが更新されない限り、すぐに更新できないことです。

2 番目の方法は、ユーザーが Web サイトに入ると、最初に第 1 レベルのメニューを取得し、次に第 1 レベルのメニューをクリックまたはスライドすると、ajax を使用して対応する第 2 レベルのメニューを取得するというものです。このようにして、第 2 レベルのメニューの権限はすぐに更新できますが、第 1 レベルのメニューは常に更新できるわけではありません。

まだいくつかの問題があります。つまり、彼は表示されるメニュー リストをクリックするのではなく、URL を入力するので、それを防ぐ方法がありません。私が考えた 1 つの解決策は、コントローラーがパブリック コントローラーを継承することです。 、およびサーバー内のアクセス許可を確認するためのパブリック コントロール。

普段はどのように対処していますか?

追記: この質問をしたとき、大まかなプロセスは理解できましたが、細かい点で不明な点が 1 つありました。ご回答ありがとうございます。私が理解した内容を以下に記載します。今後このような問題に遭遇する学生に参考にしていただければ幸いです。

役割と権限の関連付けテーブル

  1. 管理者と役割の関連付けテーブル

  2. コントローラーとメソッドの組み合わせは権限テーブル(例:ユーザー/インデックス)に保存されます

  3. コントローラーはパブリックコントローラーを継承し、初期化メソッドで権限検証を実行し、現在のURLを取得して分割してコントローラーとメソッド部分のユーザー/インデックスを取得し、権限IDを取得します

  4. ユーザーが自分のロールを取得したら、そのロールにこの権限 ID があるかどうかを確認してください。

  5. 参照フレームがあります:
ThinkCMF


ソースコードを読んだ後の一般的な考え方は次のとおりです:

データベース:

リーリー

ユーザーは役割を選択できます役割は権限を選択できます

権限:

リーリー

コントローラー:

リーリー

権限を制御するためのアイデア: リーリー これで完了です。

タイプ 1: すべてこんな感じなので、気にしないでください。通常、アクセス許可を変更する人は、スーパー管理者またはアクセス許可管理アクセス許可を持つユーザーのいずれかです。前者は自分のアクセス許可を変更する必要はありません。後者は自分のアクセス許可を変更するアクセス許可を持っていてはなりません (そうしないと、自分自身がスーパーになってしまいます)。管理者)。また、他の人の権限を変更した場合、その人は知らないため、次回ログインしたときに自動的に有効になります。
2 番目のタイプ: Ajax は推奨されません。実際、上記の質問で明らかなため、このオプションは直接渡すことができます。

ダイレクトアクセスの問題について: 権限管理はアクセス権限管理であり、メニュー項目の表示/非表示管理ではないため、コントローラが権限検出を実装していない場合、それは純粋にバグです。簡単な方法は、コントローラーの初期化時に要求されたアクションを確認し、一致しない場合は直接アクセス許可の検出を実行することです。

thinkPHP には既製のバックエンド権限管理システム モジュールがあります http://www.cnblogs.com/tanteng/archive/2012/11/25/2787597.html
Laravel にもありますので、参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。