実践的な PHP メンバー権限制御実装原則の分析_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:29:21
オリジナル
1286 人が閲覧しました

私の一般的なパーミッション システムの設計は、パーミッションを変更する際にコードの変更を行わないようにすることです。これは、chinaunix フォーラムから引用したものです。これが皆さんのお役に立ち、bkJia の友人たちにとって大きな改善となることを願っています。

コードをコピー コードは次のとおりです:

/*
*制御アクセステーブル
* Acl値関数
コレクション
acl {
public $routername="acl";
public $aclid='2 '; //権限リソースID、ログインしている人がこの権限を持っていない場合、他の(以下)の値は0となりアクセスできません
public $ roledisable=array(9) //アイデンティティを無効にします
; public $pwd=123456; //パスワードアクセス ACL->noPwd();
public $date=array('begin'=>0,'end'=> ;0); hours=array('begin'=>0,'end'=>0); //1日内の時間範囲
public $weeks=array('begin' =>0,'end'=>0) ); //1週間以内の月曜日から土曜日
public $aclgroup=array("create"=>"4,45,8") //createに必要なグループ
public $aclrole=array("all "=>"6","create"=>"7,95,78"); //create で必要なロールを作成できます。このグループには 6 の ID が必要です。ロールのみにアクセスできます
public $acl =array("all"=>0,
"index"=>4, //表4は検査グループの組み合わせを表します
"delete"=>1, //削除のみ ログイン後削除します。 , 2または4に設​​定できます
"update"=>1, //更新送信はログイン後にのみ更新できます。ここで行うことで、表示編集コンテンツページへの不正な投稿や編集も防止できます
"createForm" =>1, //新規データベースの送信もできません
"edit"=>0, //エディットボックスはログイン後にのみ表示されます
"show"=>0, //ログインしなくても表示可能ですlogin
"create "=>1); //イノベーションフォームはログイン操作が必要で、特定のグループを設定することで作成できます
?>


認証されるファイルモジュールは acl ですユーザーは acl モジュールにアクセスします (これがオンになっている場合) 認証後、このクラスが呼び出されます
その後、このクラスは $acl の all またはインデックスの値に基づいて認証チェックを実行します。
このファイルを router/acl ディレクトリに置くだけで、ユーザーが対応する転送権限を持っていない場合は、対応する制限にアクセスできなくなります。
例えば、 crud create メソッドのネガティブパーミッションは 17 です。先ほどの説明によると、$aclgroup 配列の create の 3 つのグループ 4 45 8 であるログインとグループ認可が必要になるはずです
まず、メンバーがログインしていない場合は、ログインするように求められます。メンバーがこれら 3 つのグループに属していない場合、そのグループがこのメソッドにアクセスできない場合は、権限がないことを示すメッセージが表示されます。
現在、ルーターは状況に応じて ACL 制御を有効にすることができます。その方法は、xxxxRouter.class.php ファイルにパブリック関数 isAcl(){} を追加することです。
その後、curd などのアクセス許可ファイル名を返すことができます。 curdACL.class.php クラスが自動的に呼び出されます。そして名前
CurdRouter クラス設定の確認


コードをコピーします。 コードは次のとおりです:


class curdRouter extendscontroller{
//RBAC 制御アクセス リストに戻ります。デフォルトでは、ルータと同じ名前が付けられています。これは curd です
//書く必要はありません この関数はユニバーサル許可システムを有効にしません。
public function isAcl(){}
public functionindex()
{
$booktype=M("booktype")
$this->pager=C("pager");//分類を取得する
$this - >pager->setPager($booktype->count(),10,'page'); //データの総数を取得し、各ページを 10 に設定します
$this->assign("list" ,$booktype ->orderby("bookid desc")->limit($this->pager->offset(),10)->fetch()->getRecord()); public function login (){ //ページにログイン } public function logout(){ //ページを終了 MY()->logout() //ログアウト redirect(url_for("guestbook/index"); "ログアウト成功 ",3);
}
public function noAcl($mask) { //権限がない場合はログインにリダイレクトする
redirect(url_for("guestbook/login"),"Login required", 3);
}
public function loginpost() { //ログイン送信場所は単にログイン認証を処理します
if($_POST['author']=='queryphp'&&md5($_POST['pwd'])==md5( '123456'))
{
MY()->setLogin(); //ログインステータスを設定
redirect(url_for("guestbook/adminlist"),"ログイン成功",3); "ゲストブック/ログイン")、"ログインに失敗しました",3)
}

;
コードをコピー コードは次のとおりです:

/*
*ログイン情報の基本クラス
*権限テーブルはデータをキャッシュし、ログイン時にそれを復元できます。
/ /私のグループに属します
public $acl=array(); //アクティブなコントロールテーブルgroupaclとmyaclのコントロール権限コレクションの内容はrbacのrbacidです
public $groupacl=array(); //グループが所有する権限を制御します
public $ myacl=array(); //私のアイデンティティが持つ制御権限
public $loginfaild=0; //ログイン失敗回数がこの数を超えた場合、IP ログインは何分間禁止されるべきか


これは基本です
プロジェクトのlibディレクトリにmyUser.class.phpを置くことができます
コードをコピーし、MY()関数を使用してmyUserを取得します。
curd6.gif

rbac.png

rbac-2.gif

rbac-4.gif
rbac-5.gif
rbac-6.gif
rbac-7.gif
rbac-8.gif
rbac-9.gif
rbac-10.gif
rbac-11.gif
rbac-12.gif
rbac-13.gif
rbac-14.gif
rbac-15.gif
rbac-16.gif
rbac-17.gif
rbac-18.gif
rbac-19.gif
rbac-20.gif
rbac-21.gif
rbac-22.gif
rbac-23.gif
rbac-24.gif
rbac-25.gif
rbac-26.gif

フレームワークファイルが見られます

project/routerディレクトリにguestbookRouter.class.phpがあります

背景に

guestbookRouter.class.phpのクラス名とメソッドを取得します。

次に、これらのメソッドに権限を追加します

右側に申請許可と解除許可がありますが、許可を解除すると許可制限が無いことになります

それは、許可ファイルを削除することです

アプリケーションのアクセス許可とは、このクラスにアクセス許可を追加すると、アクセス許可ファイルが生成されることを意味します。

project/router/acl/

にguestbookACL.class.phpファイルを生成します。

プログラムが guestbookRouter.class.php をロードするときに、guestbookACL.class.php 権限ファイルがあるかどうかを確認します

「はい」の場合は権限検証を使用し、そうでない場合は「いいえ」を使用します。この方法で権限を追加または削除しても、guestbookRouter.class.php ファイルのエントリは変更されません

そのため、将来的には権限を追加すると非常に便利になります。
http://queryphp.googlecode.com/files/queryphp_2011_01_27.zip

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/323443.html技術記事私の一般的なパーミッション システムの設計は、パーミッションを変更する際にコードの変更を行わないようにすることです。これは、chinaunix フォーラムから引用したものです。 PHP100をお持ちの皆様のお役に立てれば幸いです...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート