基本权限生成和给予。
1.首先再web配置里开启数据库管理权限,
'components' => [
'authManager' => [
'class' => 'yii\rbac\DbManager', //用数据库管理RBAC
],
2.然后再拓展第三方插件中找到文件夹
复制里面代码到数据库中生成四张表
3.为重要步骤,创建行为前事件PermissionBehavior.php
namespace app\components\behavior;
use Yii;
use yii\base\Behavior;
use yii\web\Controller;
use yii\web\ForbiddenHttpException;
class PermissionBehavior extends Behavior
{
public $actions = [];
public function events()
{
return [
Controller::EVENT_BEFORE_ACTION => 'beforeAction',
];
}
/**
*
* @param \yii\base\ActionEvent $event
* @throws ForbiddenHttpException
* @return boolean
*/
public function beforeAction($event)
{
$controller = $event->action->controller->id; //获取到控制器
$action = $event->action->id; //获取到action
//验证权限
$access = $controller."::".$action; //权限name
/* @var yii\rbac\DbManager $auth*/
$auth = Yii::$app->authManager;
//这一步在权限表中添加默认权限,和默认用户id给许可
if (!$a=$auth->getPermission($access)) {
$a = $auth->createPermission($access);
$a->description = '创建了 ' .$access. ' 许可';
$auth->add($a);
$auth->assign($a, Yii::$app->user->id); //添加许可
}
//超级管理员不需要验证权限 ,以后这里可以添加不需要验证的用户
//if (Yii::$app->user->id==1) return true;
if (!Yii::$app->user->can($access)) {
throw new ForbiddenHttpException(Yii::t('yii', 'You are not allowed to perform this action.'));
}
return true;
}
}
4.最后是怎么使用行为前事件PermissionBehavior.php,这样你可以点击你所有控制器方法页面,便可以自动生成权限,不必手动添加,好处就是规范不易出现手动输入的错误
/* 使用方法如下 ,在某个控制器Xxx中植入
class XxxController extends Controller
{
public function behaviors()
{
return [
\app\components\behavior\PermissionBehavior::className(),
....
];
}
......
}
*
*/
5.具体四张表的mvc等下次更新......