ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルでの許可アルゴリズムの実装

php_PHP チュートリアルでの許可アルゴリズムの実装

WBOY
WBOYオリジナル
2016-07-21 15:55:00754ブラウズ

許可設計

おそらく次のモードがあります:
ユーザー+グループ+ロール+権限
ユーザー+グループ+権限
ユーザー+ロール+権限
ユーザー+権限


最近、他の人の設計方法では、追加、参照、削除、変更などの権限値を表すのに「整数」が使用されており、それぞれ 1、2、4、8 の整数に置き換えられています。それぞれのアプローチには違いがありますが、例は次のとおりです。

1. 2 の n 乗を使用して、1、2、4、8、16... などの権限値のセットを形成します。ユーザーの権限値はサブセット内の整数の合計です。 7=1+2+4,5=1+4 のように。データベースから特定の権限を持つユーザーを取得する場合は、最初にこれらの権限値を追加し、合計が k であると仮定して、次に、ユーザーを判断する場合は、テーブルから * を選択し、ユーザー権限値 = k を選択します。 ? パーミッション値 k を取り出し、それぞれ k&1、K&2、K&4、k&16 を使用します。これが true の場合、「&」の右側の整数に等しいパーミッションがあることを意味します。たとえば、k&4 が true の場合、ユーザーは権限テーブルで値 4 の権限を持ちます。

2. 素数 2、3、5、7、11... を使用して権限セットを作成します。ユーザーの権限は、210 = 2*3*5* などの整数の積になります。 7. この方法は非常に興味深いと思いますが、主要な要素を分解する方法に問題があります。ただし、ユーザーが持っている権限の間には包括的な関係がある可能性があると彼は考えています。これは確かに事実ですが、これは複雑すぎてエラーが発生しやすいため、アクセス許可を「アトミック」にするのが最善だと思います。つまり、ユーザーが削除する権限を持っていても参照する権限を持っていない場合、ユーザーは物事を見ることができないため、削除操作を行うことができません。この矛盾は、ユーザーに権限を与えるときに閲覧権限を与えることです。

3. 整数を使用する代わりに、「ベクター テーブル」メソッドを使用して (必ずしも正しいとは限りません)、ユーザーの追加、参照、変更、削除など、考えられるすべての権限を特定の順序で配置します。許可値は、100010100001....01 のような 100 桁の固定長の文字列です。左からの各ビットは、そのような許可がある場合は 1 になり、そうでない場合は、このビットの値は 1 になります。それは 0 です。作者がユーザー許可値を 100 桁に固定した理由は、アップグレードの問題によるものだと思いますが、これは十分科学的ではないと思います。ユーザー許可値の長さは 0 未満であるべきだと思います。権限の数。例:
権限ランキング表: 追加、参照、変更、削除。ユーザー A は追加と参照の権限を持っているため、権限の値は 11 です。ユーザー B は参照と変更の権限を持っているため、権限の値は 011 です。ユーザー C は、参照する権限と、削除された権限の権限値は 0101 です。この設計の利点は、他の権限が権限テーブルに追加されても、ユーザー テーブルやロール テーブルに影響を与えないことです。

4. バックグラウンド管理で権限を 2 つのカテゴリに分割しました。各列は、参照、追加、変更、削除に対応します。ユーザーはシステムに入ります。その後、まず列の権限があるかどうかを判断し、次に操作権限があるかどうかを判断します。まず、アクセス ページのパスを取得し、次にディレクトリを分解します。ユーザーが所有するディレクトリ権限に対応します。このディレクトリがユーザーの権限に含まれている場合、そのディレクトリが (データベースから取得された) 管理ディレクトリ配列内にある場合は、このディレクトリに入る権限を持ちます。それ以外の場合は、このディレクトリに入る権限がありません。 . ただし、操作権限を判断するのは少し面倒に思えますが、ファイルの追加、参照、変更、削除のルールは基本的に同じですが、違いは追加機能と削除機能を統合したことです。たとえば、ファイル名は proAddEdit.php です。幸いなことに、ファイルを変更するときに渡す追加のパラメーター ID があることに気づきました。そのため、この方法は現在では時代遅れであると思われるため、正規表現を使用して解決しました。それは、オブジェクト指向の考え方や、システム開発におけるフレームワーク システムの使用には適応しません。

上記は私の大まかな理解と説明です。間違いがある場合は、専門家の意見をいただければ幸いです。​

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/318345.html技術記事パーミッションの設計には大まかに以下のようなモードがあります。 ユーザー+グループ+ロール+パーミッション ユーザー+グループ+パーミッション ユーザー+ロール+パーミッション ユーザー+パーミッション 最近他の人の設計手法を拝見したのですが、そのほとんどが「整数」で表現されていました。 ..
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。