最新消息: 新版网站上线了!!!

yii2权限(RBAC)

授权是验证用户是否有足够的权限做一些事情的过程。 yii2提供控制它的几种方法。

访问控制基础(Access control basics

 

Access control basics很简单实现使用[[yii\web\AccessControl]]:

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => \yii\web\AccessControl::className(),
                'only' => ['login', 'logout', 'signup'],
                'rules' => [
                    [
                        'actions' => ['login', 'signup'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
    // ...

在上面的代码中,我们要附加的访问控制行为给控制器。因为只有指定的选项,它会被应用到'登录''退出',只有'注册'的行动。一组基本的选择规则[[yii\web\AccessRule]]内容如下:

  • 让所有来宾(尚未验证)的用户访问“登录”和“注册”的行动。
  • 允许通过验证的用户才能访问'注销'的行动。

规则检查一个接一个从顶部到底部。如果规则匹配,动作立即发生。如果没有,下一个规则进行检查。如果没有规则匹配的访问被拒绝。

[[yii\web\AccessRule]] 是相当灵活的,允许另外什么被证明检查IP地址和请求方法(即POSTGET)。如果不是的话,你可以通过匿名函数指定自己的检查:

class SiteController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => \yii\web\AccessControl::className(),
                'only' => ['special-callback'],
                'rules' => [
                    [
                        'actions' => ['special-callback'],
                        'allow' => true,
                        'matchCallback' => function ($rule, $action) {
                            return date('d-m') === '31-10';
                        }
                    ],

Action

    // ...
    // Match callback called! 此页面可以访问只有每个1031
    public function actionSpecialCallback()
    {
        return $this->render('happy-halloween');
    }

有时你想,当访问被拒绝采取自定义操作。在这种情况下,你可以指定denyCallback

基于角色的访问控制(RBAC

 

基于角色的访问控制是非常灵活的方式来控制访问是一个完美的匹配的复杂系统中的权限是可以定制的。

使用基于文件的配置的RBAC

为了开始使用它,需要一些额外的步骤。首先,我们需要配置authManager应用程序组件在应用程序配置文件(web.phpmain.php取决于你使用的模板):

'authManager' => [
    'class' => 'app\components\PhpManager',
    'defaultRoles' => ['guest'],
],

经常使用角色存储在同一个数据库表的其它用户数据。在这种情况下,我们可以将它定义通过创建自己的组件app/components/PhpManager.php

<?php
namespace app\components;
 
use Yii;
 
class PhpManager extends \yii\rbac\PhpManager
{
    public function init()
    {
        parent::init();
        if (!Yii::$app->user->isGuest) {
            //我们假设用户的角色是存储在身份
            $this->assign(Yii::$app->user->identity->id, Yii::$app->user->identity->role);
        }
    }
}

然后在创建权限层次结构@app/data/rbac.php:

<?php
use yii\rbac\Item;
 
return [
    //这是你们的管理任务
    'manageThing0' => ['type' => Item
		
        
		-->
		
        

转载请注明:谷谷点程序 » yii2权限(RBAC)