私の一般的なパーミッション システムの設計は、パーミッションを変更する際にコードの変更を行わないようにすることです。これは、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を取得します。
フレームワークファイルが見られます
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
http://www.bkjia.com/PHPjc/323443.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/323443.html技術記事私の一般的なパーミッション システムの設計は、パーミッションを変更する際にコードの変更を行わないようにすることです。これは、chinaunix フォーラムから引用したものです。 PHP100をお持ちの皆様のお役に立てれば幸いです...