zoukankan      html  css  js  c++  java
  • Yii2.0 behaviors方法使用

    初学Yii2.0 学习路径:http://www.yii-china.com/

    经过各种学习,积累知识点;

    (1)控制器 behaviors 过滤数据需要引入如下文件

    use yiifiltersAccessControl;
    use yiifiltersVerbFilter;
    

    首先:什么是过滤器?过滤器就是对不同用户角色的控制;

            如(游客->最普通的平民,用户->已经注册的用户,管理员->拥有一切权限)

            然而 Yii2自带的权限控制默认只支持两个角色:

    1. guest(游客,没有登录的,用 表示)

    2. authenticated (登录了的,用 表示)

          在这里我们需要实现的是对这两种不同的角色指定不同的访问权限,就是为他们分配不同的可以访问的控制器或者方法。

    目前我们如果直接点击导航栏的Status,我们还是可以在没有登录的情况之下进行发表状态(status)

    所以我们需要改一下我们的代码和逻辑,Yii2在这方面的控制做得非常好,

    其实实现这个我们只需要修改一下StatusController.php里面的behaviors()方法而已,

    在这里面加入一段access设置:

    控制器中的代码(1)

    public function behaviors(){
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['index', 'create', 'update'],
                'rules' => [
                    // 允许认证用户
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    // 默认禁止其他用户
                ],        
            ],
            'verbs' => [
                'class' => VerbFilter:: className(),
                'actions' => [
                     'index'  => [ 'get'],            //只允许get方式访问
                     'create' => [ 'post'],          //只允许用post方式访问
                     'update' => [ 'post']
                 ],
            ],
        ];
    }
    

       加上access这一段之后,再次点击Status,Yii2就会将未登录的我重定向到登录页面。 

      重定向的方法如下:

    'components' => [
            'user' => [
                'identityClass' => 'backendsystemcoreUserIdentity',
                'enableAutoLogin' => true,
                'loginUrl' => ['login/login']      //此处设置默认登录页,如果未登录就会跳转到该页
            ],
            ...
    

     用户一旦登录进来之后,我们就可以通过下面这行代码来获取用户的id了:

    $userid=Yii::$app->user->getId();    //获取用户id
    

      

     控制器中的案例(2)

    public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only' => ['logout', 'signup', 'change-password'],
                    'rules' => [
                        [
                            'actions' => ['signup'],  //允许游客注册
                            'allow' => true,
                            'roles' => ['?'],
                        ],
                        [
                            'actions' => ['logout', 'change-password'],
                            'allow' => true,         //允许用户登出、修改密码
                            'roles' => ['@'],
                        ],
                    ],
                ],
                'verbs' => [
                    'class' => VerbFilter::className(),
                    'actions' => [
                        'logout' => ['post'],       //登出只允许提交方式为post,否则报错
                    ],
                ],
            ];
        }
    

      

  • 相关阅读:
    路由重分布(二)
    linux系统命令的收集 第一部分
    如何在VM软件中安装Linux系统
    Spring boot连接MongoDB集群
    jQuery中防止表单提交两次的方法
    Java中使用HTTP阻塞式调用服务器API
    本地项目初始化git推送到服务器
    前端页面调用Spring boot接口发生的跨域问题
    jQuery中异步问题:数据传递
    Git中修复bug
  • 原文地址:https://www.cnblogs.com/lccjob/p/5057369.html
Copyright © 2011-2022 走看看