ホームページ > バックエンド開発 > PHPチュートリアル > yii2 は完璧なバックエンドを準備し、rbac 権限制御ケースのチュートリアルを実装します

yii2 は完璧なバックエンドを準備し、rbac 権限制御ケースのチュートリアルを実装します

WBOY
リリース: 2016-06-13 12:29:24
オリジナル
1150 人が閲覧しました

yii2 は完璧なバックエンドを構築し、rbac 権限制御ケースを実装するチュートリアル

著者: Bailang 出典: www.manks.top/article/yii2_frame_rbac_template

この記事の著作権は著者に属します。歓迎しますが、著者の許可はありません。あなたは、この声明を保持し、記事ページのわかりやすい位置に原文へのリンクを提供しなければならないことに同意します。そうしない場合、あなたは法的責任を追及する権利を留保します。

1. yii2 をインストールします

まだインストールされていない場合は、yii2 史上最も簡単なインストール チュートリアルを参照してください。

すでにインストールされている場合は、インストールされている場合は、次のステップに進んでください

2. 構成データベース

2.1 構成データベース

実際のプロジェクトでは、ローカル データベースを変更します多くの場合、オンライン データベースと矛盾します。

ここで main-local.php を設定するだけで済みます。製品がオンラインになった後は、git または svn を使用して main-local.php を無視し、オンラインで直接デプロイできます。 。

ここで使用する mysql データベースは次のように構成されています

もちろん、上記の赤丸で囲った情報は自分で手動で変更する必要があります。これは偶然です。私のものと同じなので、変更する必要はありません。

2.2 ユーザー データ テーブルを作成します。後でバックグラウンド ログインを実装します。

注: ユーザー テーブルとメニューの作成テーブルは、後でダウンロードするコンポーネント yii2 を参照できます -sql in admin。特定のディレクトリは

vendormdmsoftyii2-adminmigrationsschema-mysql.sql

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID',  `username` varchar(255) NOT NULL COMMENT '用户名',  `auth_key` varchar(32) NOT NULL COMMENT '自动登录key',  `password_hash` varchar(255) NOT NULL COMMENT '加密密码',  `password_reset_token` varchar(255) DEFAULT NULL COMMENT '重置密码token',  `email` varchar(255) NOT NULL COMMENT '邮箱',  `role` smallint(6) NOT NULL DEFAULT '10' COMMENT '角色等级',  `status` smallint(6) NOT NULL DEFAULT '10' COMMENT '状态',  `created_at` int(11) NOT NULL COMMENT '创建时间',  `updated_at` int(11) NOT NULL COMMENT '更新时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='用户表';
ログイン後にコピー

2.3 にあります。フロントエンド サイトにアクセスするには、まずユーザーを登録します。

登録が成功すると、右上隅にログイン ステータスが表示されます。この登録されたユーザーは後で使用します。

次に、背景テンプレートの構成を開始する必要があります。

3. AdminLTE を使用して背景テンプレートをレンダリングします

背景テンプレートには AdminLTE (Yii2 Framework のバックエンド テーマ) を使用します

曲を挿入します: AdminLTE は完全にレスポンシブです管理テンプレート。 Bootstrap3 フレームワークに基づいているため、テンプレートのカスタマイズが簡単です。小型モバイルデバイスから大型デスクトップまで、さまざまな画面解像度に適合します。

ダッシュボード、電子メール、カレンダー、ロック画面、ログインと登録、404 エラー、500 エラー、その他のページを含む複数のページが組み込まれています。

3.1 AdminLTE のインストール

https://github.com/dmstr/yii2-adminlte-asset

上記のリンクを開いて、手順に従ってインストールします

ここで、インストール手順を簡単に説明します。

因为是mac,这里直接composer进行安装就行了composer require dmstr/yii2-adminlte-asset "2.*"
ログイン後にコピー

インストールが成功すると、次のように、ベンダー ディレクトリにさらにいくつかのフォルダーが作成されます。

3.2 yii2 設定を AdminLTE と統合して、優れたハイエンドのバックエンドを構築します

最初に backend/config/main.php を設定して効果をプレビューしましょう。心配です。結果をすぐに試してみるのが待ちきれません。

'components' => [      'view' => [        'theme' => [            'pathMap' => [                                [email protected]/views' => [email protected]/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app'                          ],        ],    ],],
ログイン後にコピー

いいですね、すぐにページの見栄えが良くなりました。

ここで問題が発生します。テーマをコンポーネントで個別に設定するため、後でレイアウト ファイルを変更するのが非常に不便です。次に、ローカル以外のファイルをコピーして、Yii 付属のレイアウトを上書きします。

vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app ディレクトリにレイアウトとサイトをコピーします。

バックエンド/ビューのレイアウトとサイトを上書きします。 /ディレクトリ サイトに対応するファイル

上書き後、コンポーネントの下のビューの設定項目を忘れずにブロックしてください

この時点で背景テンプレートの構築は終了です。それはとても幸せです

4. 次に、Yii の rbac を使用してバックグラウンド許可制御を実装します

4.1 最初に短いルートを設定しましょう

コンポーネントbackend/config/main.php ファイルに次の構成を加えたもの

'urlManager' => [        //用于表明urlManager是否启用URL美化功能,在Yii1.1中称为path格式URL,        // Yii2.0中改称美化。       // 默认不启用。但实际使用中,特别是产品环境,一般都会启用。       'enablePrettyUrl' => true,        // 是否启用严格解析,如启用严格解析,要求当前请求应至少匹配1个路由规则,        // 否则认为是无效路由。        // 这个选项仅在 enablePrettyUrl 启用后才有效。        'enableStrictParsing' => false,        // 是否在URL中显示入口脚本。是对美化功能的进一步补充。        'showScriptName' => false,        // 指定续接在URL后面的一个后缀,如 .html 之类的。仅在 enablePrettyUrl 启用时有效。        'suffix' => '',        'rules' => [                "<controller:\w+>/<id:\d+>"=>"<controller>/view",          "<controller:\w+>/<action:\w+>"=>"<controller>/<action>"        ],],
ログイン後にコピー
次に、プロジェクトのルート ディレクトリ backend/web に .htaccess ファイルを作成し、次の内容です。このファイルを作成することさえできません。実際に練習する必要があるようです。

Options +FollowSymLinksIndexIgnore  */*RewriteEngine on# if a directory or a file exists, use it directlyRewriteCond  %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-d# otherwise forward it to index.phpRewriteRule . index.php
ログイン後にコピー
もちろん、Apache は rewrite モジュールを有効にする必要があります。

gii モジュールにアクセスしてテストしましょう。

http://localhost/advanced/backend/web/gii

検証は OK です。

4.2 権限制御に必要なデータテーブルを作成する

もちろん、これらは yii2 が用意してくれました。

vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql ファイルを開き、データ テーブルを順番に作成します

`auth_assignment`;`auth_item_child`;`auth_item`;`auth_rule`;另外补充菜单menu表,需要的自行创建说明:user表和menu表的创建可以参考 vendor\mdmsoft\yii2-admin\migrations\schema-mysql.sqlCREATE TABLE `menu` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(128) NOT NULL,  `parent` int(11) DEFAULT NULL,  `route` varchar(256) DEFAULT NULL,  `order` int(11) DEFAULT NULL,  `data` text,  PRIMARY KEY (`id`),  KEY `parent` (`parent`),  CONSTRAINT `menu_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `menu` (`id`) ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8
ログイン後にコピー
4.3 yii2-admin をダウンロードしてインストールします

参考 https://github.com/mdmsoft/yii2-admin

インストール後は adminlte のインストールと同じです

4.4 権限の設定

backend/config/main.php を開いて設定を変更します

'modules' => [        'admin' => [                'class' => 'mdm\admin\Module',       ],],'aliases' => [        [email protected]/admin' => [email protected]/mdmsoft/yii2-admin',],//这里必须添加authManager配置项'components' => [        ...        //components数组中加入authManager组件,有PhpManager和DbManager两种方式,        //PhpManager将权限关系保存在文件里,这里使用的是DbManager方式,将权限关系保存在数据库.        'authManager' => [                'class' => 'yii\rbac\DbManager',                'defaultRoles' => ['guest'],        ],        ...],
ログイン後にコピー
4.5 権限モジュールにアクセスして効果を確認してみましょう。

http://localhost/advanced/backend/web/admin/route

まあ、インターフェイスはそこにあるので、受け入れプロセスをスピードアップしましょう 私たちの権限は成功したかどうか?

一般的には、この時点では問題ありません。後で、ルート配布権限を自分で追加できます。

次に、左側のメニューに権限列を追加します。コードを直接コピーして

に配置できます。

<ul class="sidebar-menu">                <li class="treeview">                       <a href="#">                                <i class="fa fa-gears"></i> <span>权限控制</span>                                <i class="fa fa-angle-left pull-right"></i>                       </a>                       <ul class="treeview-menu">                               <li class="treeview">                                        <a href="/admin">管理员</a>                                        <ul class="treeview-menu">                                                <li><a href="/user"><i class="fa fa-circle-o"></i> 后台用户</a></li>                                                <li class="treeview">                                                        <a href="/admin/role">                                                                <i class="fa fa-circle-o"></i> 权限 <i class="fa fa-angle-left pull-right"></i>                                                        </a>                                                        <ul class="treeview-menu">                                                                <li><a href="/admin/route"><i class="fa fa-circle-o"></i> 路由</a></li>                                                                <li><a href="/admin/permission"><i class="fa fa-circle-o"></i> 权限</a></li>                                                                <li><a href="/admin/role"><i class="fa fa-circle-o"></i> 角色</a></li>                                                                <li><a href="/admin/assignment"><i class="fa fa-circle-o"></i> 分配</a></li>                                                                <li><a href="/admin/menu"><i class="fa fa-circle-o"></i> 菜单</a></li>                                                        </ul>                                               </li>                                        </ul>                                </li>                        </ul>                </li>        </ul>
ログイン後にコピー

我们看下效果图,这样一来,我们对权限进行操作就十分的方便了

如此,我们的权限控制基本告一段落了,关于权限需要说明的是:

你应该先添加路由,然后添加权限名称,后再对角色或个人进行权限的独立分配。

5、如何利用menu对菜单进行控制?

4.5步骤中我们是直接写ul li的方式对左侧菜单进行操作的,这样也是能够实现通过菜单对权限进行控制滴。但是喃,一来不方便操作,而来增加修改个什么东东都得需要我们去修改程序实现,这也TTM不方便了。还好我们家有妙招,DDV杀杀杀。

好了,又扯远了。仔细回想,是不是我们创建的123456张表还有一张menu表没有利用到喃?这货怎么利用喃?来,我们回归正题。

首选,我们访问/admin/menu/index添加几个一级菜单,姑且叫做一级1,一级2,一级3吧,哦对了,忘记添加路由了,怎么回事呢,我们先访问/admin/route/index 把左侧的路由移动到右侧,不然上面创建新菜单会失败哦。创建菜单时,[映射][数据]我们暂且不填写。

添加完毕之后呢,我们打开布局文件left.php,use两个类文件,分别是yii\bootstrap\Nav和mdm\admin\components\MenuHelper;

获取权限的操作 MenuHelper::getAssignedMenu都帮我们做好了。

ok,我们删掉4.5添加的sidebar-menu菜单,添加下面的代码试试看

echo Nav::widget(    [        'encodeLabels' => false,        'options' => ['class' => 'sidebar-menu'],        'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id),    ]);
ログイン後にコピー

现在菜单控制权限我们基本上是ok了,现在你可以继续添加菜单试试效果如何。

到此呢,我们的后台和rbac的权限控制可以说是做得非常完美了,如果你在尝试的过程中遇到任何问题,下面留言就好,咱们共同交流探讨。

1楼xchsp
谢谢分享
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート