ホームページ  >  記事  >  バックエンド開発  >  Yii で RBAC を使用するための完全なガイド (ユーザーロール権限制御)_PHP チュートリアルの簡単な分析

Yii で RBAC を使用するための完全なガイド (ユーザーロール権限制御)_PHP チュートリアルの簡単な分析

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

前に書いてあります
* 私のフィードアドレスが http://feeds.imdong.net に変更されました。読者を更新してください。
* 以下のコンテンツは Yii 1.0.x に適していますが、他のバージョンでは若干の違いがある可能性があります。
* 皆様のコメントやフィードバックに基づいて、この記事は新規学習者が理解しやすいように継続的に修正および補足されます。

準備をしましょう
Yii は強力な設定メカニズムと多くの既製のクラス ライブラリを提供します。 Yii で RBAC を使用するのは非常に簡単で、RBAC コードを記述する必要はまったくありません。したがって、準備としては、エディタを開いて私に従ってください。
パラメータを設定してデータベースを作成します
設定配列に次の内容を追加します:

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

'components' => ;' cdbauthmanager ', // 認証クラス名
'defaultRoles' = & gt; Array ('guest'), // デフォルト文字 'itmtable' = & gt; ' auth_item ', // 認証項目テーブル名 ' itemChildTable' => 'pre_auth_item_child',//認証項目の親子関係
'assignmentTable' => 'pre_auth_assignment', //認証項目の認可関係
),
//...


那这三个数据表怎么建立呢?很简单,去看framework/web/auth/schema.sql。注意要和你的自定义的表名称对应起来。比如SQL文件中的AuthItem你要修改为pre_auth_item。然后在数据库中运行这个SQL文件中的语句。

了解概念
你可能要问,剩下的代码呢?我告诉你,没有啦。RBAC系统就这样建立起来了。但是为了使用它,你需要了解它的运行机制。我会尽量讲的啰嗦一点……(官方的RBAC文档在这里,但是我曾经看了4-5遍才明白。)

三个概念
你需要了解的是,授权项目可分为operations(行动),tasks(任务)和 roles(角色)。
一个用户拥有一个或者多个角色,比如,我们这里有三个角色:银行行长、银行职员、顾客。我们假设:
    * 张行长 有角色:银行行长、银行职员、顾客(人家自己可以存钱嘛)。
    * 王职员 有角色:银行职员、顾客。
    * 小李 有角色:顾客。

那么,相应的,只要顾客可以做的事情,小李就可以做,王职员和张行长也可以。银行职员可以做的事情,王职员和张行长都可以做,小李就不可以了。

比如,一个“顾客”可以存钱,那么拥有“顾客”角色的张行长、王职员、小李都可以存钱。“银行职员”可以打印顾客的交易记录,那么有“银行职员”角色的张行长和王职员都可以,而小李不行,必须找一个有“银行职员”角色的人才可以打印详细的交易记录。一个“银行行长”才可以进入银行钱库提钱,那么只有张行长可以,因为它才有“银行行长”的角色。
这就是基于角色的认证体系,简称RBAC。

角色的继承
角色是可以继承的,比如我们规定如下:
    * 凡是“银行行长”都是“银行职员”,也就是说,只要银行职员可以做的事情,银行行长都可以做。
    * 凡是“银行职员”都是顾客,同上,顾客可以做的事情银行职员也可以做。
那么角色关系就变成了:
    * 张行长 有角色:银行行长。
    * 王职员 有角色:银行职员。
    * 小李 有角色:顾客。
这样更简单了,这就是角色的继承。

任务的继承
一个任务(task)是可以包含另外一个任务的,我们举个例子,比如“进入银行”。
我们设定“顾客”这个角色有“进入银行”的权限。也就是说,“顾客”可以执行“进入银行”的任务。接下来,我们假设“进入柜台”是进入银行的父权限,也就是说,“进入柜台”包含“进入银行”。只要能“进入柜台”的人都可以“进入银行”。我们把“进入柜台”这个任务权限给“银行职员”。

那么从角色上来说,王职员可以进入银行,因为王职员的角色是“银行职员”,而“银行职员”包含了“顾客”的角色。那么“顾客”可以进行的“任务”对于“银行职员”来说也是可以进行的。而“顾客”可以“进入银行”,那么王职员也可以“进入银行”。这是角色的继承带来的。

我们再假设有个赵领导,是上级领导,可以进入柜台进行视察。那么,我们的任务关系是:
    * 赵领导 有任务:进入柜台。
那么,赵领导就可以“进入银行”。因为“进入银行”是被“进入柜台”包含的任务。只要可以执行“进入柜台”的人都可以执行“进入银行”。这就是任务的继承。

关于行动
行动是不可划分的一级。也就是说。而一个行动是不能包含其他行动的。假设我们有个行动叫“从银行仓库中提钱”。我们把这个行动作包含“进入柜台”。那么只要可以执行“从银行仓库中提钱”的角色都可以执行“进入柜台”这个任务。

3 人の関係
*役割には、別の 1 つまたは複数の役割が含まれる場合があります。
* ロールには別の 1 つまたは複数のタスクを含めることができます。
* キャラクターには別の 1 つまたは複数のアクションを含めることができます。
*
* タスクには、別の 1 つまたは複数のタスクを含めることができます。
* タスクには別の 1 つまたは複数のアクションを含めることができます。
*
* アクションはロールまたはタスクによってのみ含めることができ、他のアクションを含めたり、細分化することはできません。
このようにして、権限管理システムが形成されます。 「タスク」と「アクション」に関しては、文字通りの意味を考える必要はありません。この 2 つは 2 つのレベルの権限を形成します。

エンパワーメント
RBAC権限管理を確立しており、権限のWEB管理を行う必要があります。これらを使用するには、自分でコードを記述する必要があります。
さまざまなタイプのプロジェクトに応じて認可プロジェクトを定義するには、次のメソッドのいずれかを呼び出します:
* CAuthManager::createRole
* CAuthManager::createTask
* CAuthManager::createOperation
認可プロジェクトのセットを取得したら、認可プロジェクト関係を確立するには、次のメソッドを使用します:
* CAuthManager::addItemChild
* CAuthManager::removeItemChild
* CAuthItem::addChild
* CAuthItem::removeChild
最後に、次のメソッドを呼び出して、各ユーザーにロール アイテムを割り当てます。 * CAuthManager::assign
* CAuth Manager ::revoke
以下に、提供された API を使用して認証レベルを確立する例を示します:

コードをコピー コードは次のとおりです:
$auth=Yii ::app()->authManager;
$auth->createOperation('createPost','投稿を作成');
$auth->createOperation('readPost','投稿を読む');
$ auth->createOperation('updatePost', '投稿を更新');
$auth->createOperation('deletePost','投稿を削除');
$bizRule='return Yii::app()-> ;user->id==$params ["post"]->authID;';
$task=$auth->createTask('updateOwnPost','投稿者自身による投稿を更新',$bizRule);
$task->addChild('updatePost ');
$role=$auth->createRole('reader');
$role->addChild('readPost');
$role=$auth-> ;createRole('author');
$ role->addChild('reader');
$role->addChild('createPost');
$role->addChild('updateOwnPost');
$role =$auth->createRole('editor ');
$role->addChild('reader');
$role->addChild('updatePost');
$role=$auth->createRole( 'admin');
$role->addChild('editor');
$role->addChild('author');
$role->addChild('deletePost');
$auth-> assign('reader','readerA') ;
$auth->assign('author','authorB');
$auth->assign('editor','editorC');
$auth-> ;assign('admin','adminD' );

つまり、ロール、タスク、アクションをリストするための管理インターフェイスを自分で作成し、このインターフェイス上で管理する必要があります。追加、削除、変更など。

権限チェック
管理インターフェースで権限を与えていると仮定すると、プログラムで権限チェックを実行できます:

コードをコピー コードは次のとおりです:
if( Yii::app ()- >user->checkAccess('createPost') )
{
// ここでフォームやその他の操作を表示できます
} else {
// チェックが失敗した場合はジャンプしたり、警告を表示したりできます
}


上記のコードは、ユーザーが「createPost」を実行できるかどうかをチェックします。この createPost はタスクまたはアクションである可能性があります。

その他
Yii パーミッションシステム RBAC は使いにくいと言っている人の多くは、実際にはドキュメントを理解していません。私の経験上、これまで使用したフレームワークの中で Yii フレームワークの RBAC が最も優れていると感じています。また、最小限のコードを自分で記述する必要があります。
Yii の RBAC には、「ビジネス ルール」や「デフォルト ロール」など、より高度な使用法があります。公式ドキュメントを参照できます。
まだ RBAC を理解していない人、または Yii の RBAC の使用方法がわからない人がいることは承知しています。問題はありません。下のコメント ボックスで質問してください。
ハッピーイーイ!

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327750.html技術記事前に書いてあります* 私のフィード アドレスは http://feeds.imdong.net に変更されました。読者を更新してください。 *以下の内容は Yii 1.0.x に適していますが、他のバージョンでは若干の違いがある可能性があります。 * ルート...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。