suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php - Yii2的rbac怎么关联某一个具体的action,有人有例子吗?

看到Yii::$app->authManager->createPermission('createPost')就可以创建createPost权限了;
然后再分配给某个用户,该用户就拥有这个权限了。
我认为'createPost'应该仅仅是权限的名字而已,事实上他也许对应一个logout操作(假设)。那么Yii怎么把权限和具体的action关联起来的呢?
是不是要配合AccessColtrol来使用呢?如果是,那要这个permission有什么意义呢?直接给role不就可以了?
求指教。3Q first~

PHPzPHPz2894 Tage vor269

Antworte allen(3)Ich werde antworten

  • PHP中文网

    PHP中文网2017-04-10 15:36:14

    正好做到做鉴权判断这块,我给你解答。

    AccessColtrol 这种是一种形式

    index、view 两个动作就是能通过AccessColtrol来判断了

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['index', 'view', 'create', 'update'],
                'rules' => [
                    [
                        'actions' => ['index'], //来宾可见
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['view', 'create', 'update'], //登录用户
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    [
                        'actions' => ['create', 'update'], //Post请求
                        'allow' => true,
                        'verbs' => ['POST']
                    ],
                ],
            ],
        ];
    }
    
    public function actionIndex()
    {
        return '来宾可见';
    }
    
    public function actionView()
    {
        echo '登录用户可见:'."\n";
        return Yii::$app->user->identity->id;
    }
      

    使用Rbac,放在各自的方法里

    优点是使用灵活,缺点是每次都要写相识的代码

    public function actionCreate()
    {
        if (Yii::$app->user->can('CreatePost')) {
            return '可以的';
        } else {
            throw new UnauthorizedHttpException('对不起,您现在还没获此操作的权限。');
        }
    }
    
    public function actionUpdate()
    {
        if (Yii::$app->user->can('UpdatePost')) {
            return '可以的';
        } else {
            throw new UnauthorizedHttpException('对不起,您现在还没获此操作的权限。');
        }
    }
    
    

    使用Rbac,放在beforeAction这个方法里

    正好跟上面一点相反,要根据请求的动作来判断哪个权限

    public function beforeAction($action) {
        if (parent::beforeAction($action)) {
            //print_r($action); // 权限名字传递过去(CreatePost)
            if (!Yii::$app->user->can('CreatePost')) {
                throw new UnauthorizedHttpException(Yii::t('yii', '对不起,您现在还没获此操作的权限'));
            }
            return true;
        } else {
            return false;
        }
    }
    
    

    最后给你参考资料:http://www.yiichina.com/doc/guide/2.0/security-authorization

    Antwort
    0
  • 大家讲道理

    大家讲道理2017-04-10 15:36:14

    [该用户已被屏蔽]被屏蔽是什么意思啊?

    Antwort
    0
  • PHPz

    PHPz2017-04-10 15:36:14

    Javascript局部变量有没有属性描述符

    Antwort
    0
  • StornierenAntwort