北哥这篇文讲解 yii2 权限扩展( yii2-admin) - 中部 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abei
V2EX    PHP

北哥这篇文讲解 yii2 权限扩展( yii2-admin) - 中部

  •  
  •   abei 2017-08-07 16:34:21 +08:00 2925 次点击
    这是一个创建于 2998 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本篇继续讲解 yii2-admin 扩展

    上一篇 m155 我们讲解了 yii2-admin 的安装、布局和简单的配置,本节我们重点讲解 route 的实现以及整个 rbac 操作流程。

    本章要讲的内容如下

    • yii2-admin 为何多了一层 route,是咋回事?
    • 用 yii2-admin 配置带角色的会员系

    继续说 route 及 Permissions

    上一节我们说了 yii2-admin 多出 route 层,但是 yii2 的 rbac 数据表中并没有相关的表,本节我们讨论下 route 是如何处理的以及它和 persission 的关系。

    而我们使用 yii2-admin 也是从添加 route 开始的,打开 index.php?r=admin/route

    alt

    自动检索

    首先看 ① 处,yii2-admin 会自动帮我们把 yii2 程序的所有路由全部分析并列举出来供选择,当然你也可以在 ④ 处自行添加,但是有一点要注意

    在你自己添加路由的时候,务必且必须以 / 开始,否则它会带来很多麻烦问题。

    对于自动检索处的路由,我们可以通过 ② 操作将其添加到 ③ 区域。对于自动添加的路由它会自己进入到 ③ 区域。

    就想我下面动图展示的一样

    操作流程

    当然,如果是自己添加的,你在自动检索区①处是看不到的。

    当我们从自动检索区添加一个到 ③ 区域,或自行添加后,rbac 系统发生了什么那?

    其实它填充了 item 表,如下图

    是的,这货就是权限

    是的,这货就是权限,但如果它是权限,那 yii2-admin 的权限又是干嘛的?别急,我们熟悉下 yii2-admin,顺完会为大家揭晓。此坑必填。

    Permissions

    我们来看 Permissions 菜单。现在我们来生成一个 Permission。

    新增权限

    号外,因本章并不是讲解 yii2 rbac 内容,北哥假设你对 yii2 rbac 已经有所了解,如果不了解可以看下 rbac 系列视频

    Route 和 Permissions 的关联就在于我们新联了一个权限后,当新建一个权限后,yii2-admin 需要让我们为此权限指定对应的路由,不明白?看图,看图最直观。

    为权限指派路由

    上图的目的是什么?我们知道,路由就是资源,我们现在在为一个权限指派资源,当然你理解为权限可以属于另一个权限也没有问题。

    当我们把路由 /goods/index 指派给 权限 goods-edit 后,将来拥有 goods-edit 权限的人就能访问 /goods/index 了。

    接下来我们看看为权限指路由后,rbac 数据表的变化

    item 表变化

    关系已经建立

    是的,权限之间的所属关系已经建立。

    填一个坑

    接下来我们来填上文的一个坑,当我们为一个权限分配路由的时候,从数据表我们知道他们都是权限,那么在每个权限页面又如何分析出路由项而没有混入普通的权限那。这个情况在路由页面的 ③ 区域我想你也感觉到了。

    这是为什么那?

    其实很简单,这要看下 yii2-admin 的一个方法

    // /vendor/mdmsoft/yii2-admin/models/searchs/AuthItem.php 52 行 public function search($params) { /* @var \yii\rbac\Manager $authManager */ $authManager = Yii::$app->getAuthManager(); if ($this->type == Item::TYPE_ROLE) { $items = $authManager->getRoles(); } else { $items = array_filter($authManager->getPermissions(), function($item) { return $this->type == Item::TYPE_PERMISSION xor strncmp($item->name, '/', 1) === 0; }); } $this->load($params); .... 

    对,就是其中的 strncmp($item->name, '/', 1) === 0 这句,这个方法搜索出了所有的权限列表,然后筛选出这些权限名字中第一个字符是 / 的,这也是为何我们说添加路由的时候必须 / 开头的原因。

    ok。

    其他操作

    关于如何建立角色等就不做详说,关于 rule 我们会放到最有一篇说。

    角色的建立和赋予权限

    为会员分配角色

    通过对上面的学习,我们学会了如何新建权限和路由,如何建立角色并分配相关权限,万里长征走完了第一步,下面我们来为 yii2 程序的会员分配角色和权限。

    你一定发现了,yii2-admin 并没有一个 user 的菜单?不是没有,是没有配置而已。

    配置 user

    我们需要使用 yii2-admin 提供的会员模型,数据表已经为我们准备好

    // 导入数据表 命令行运行 ./yii migrate --migratiOnPath=@mdm/admin/migrations 

    两张表

    你也可以复制 /vendor/mdmsoft/yii2-admin/migrations 对应的数据库 sql 脚本导入。

    这个行为会导入两张表,我们先用其中的 user 表,menu 会在下一节权限菜单中使用。

    yii2-admin 会自动检测数据库中是否有对应表而陈列出对应的菜单,现在你打开 index.php?r=admin 后,是不是多了 user 和 menu 菜单了。

    菜单

    接下来我们需要设置下 web.php

    //在 user 模块里 'user' => [ 'identityClass' => 'mdm\admin\models\User', 'loginUrl' => ['admin/user/login'], ] 

    当你配置完以后会发现 admin 又多了一个叫做 Assignments 的菜单。不过此刻我们的系统中是没有会员数据的,别担心,yii2-admin 提供了一个 action 让我们生成会员。

    index.php?r=admin/user/signup

    注册会员

    赶紧去建立几个会员吧

    分配角色

    现在有了会员,选择 Assignments 菜单中的某个会员,我们就可以轻松的为他分配角色和权限了

    alt

    此刻我为会员 abei 分配了角色“客服人员”,它具有 goods-edit(可以访问 /goods/index 路由) 但是不能访问 /goods/delete

    效果演示

    这就是 rbac 的会员、角色、权限、资源的关系。

    说了好多,大家也很累了,先这样,下一篇继续聊 yii2-admin 的 user 和 menu 两块。


    签名档

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3802 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 00:54 PVG 08:54 LAX 17:54 JFK 20:54
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86