美文网首页
Thinkphp5后台未登入拦截和权限控制

Thinkphp5后台未登入拦截和权限控制

作者: 蔡先森_a1e2 | 来源:发表于2018-06-20 14:33 被阅读0次

        一个常规的后台管理系统,后台未登入拦截是最基本的也是最常见的功能之一,然后在稍微复杂一点的是根据用户的权限的不同,能访问的内容也是不一样的,其本质是在数据库中建立一张url表,给每个用户分配不同的权限字段,然后该字段可以填写是url表里面能访问的id值,具体的自己设置.

        那如果实现这个功能呢,其实也是非常简单的,我们可以利用面向对象的继承的特性,在控制器中先继承我们自己的定义的类,但是有人会问了,那系统的本身的基类呢,其实很简单,我们自己穿件的类继承系统的类就好了,下面是我实现的主要代码,

    我自己创建了一个基类,命名为CheckLogin,然后用use导入,这个基类随便放到哪里,但是一定要跟你的use后面的导入对应起来,然后我在controller目录下面创建了一个名为CheckLogin.php的文件,文件的具体内容就是实现未登入拦截和权限控制的:


    <?php

    namespace app\admin\controller;

    use think\Session;

    use think\Controller;

    use think\Db;

    class CheckLogin extends Controller

    {

        protected $module;

        protected $controller;

        protected $action;

        protected function _initialize() {

            $request=  \think\Request::instance();

            $this->controller = $request->controller();

            $this->module = $request->module();

            $this->action = $request->action();

             if (empty(Session('username'))) {

                $this->error('请先登录', 'Login/index', 1);

            }else{

                $username = Session::get('username');

                $this->assign('username',$username);

                $urls  =  Db::table('admin')->where(['username'=>$username])->value('urls');

                //权限检测

                $power = $this->check_power($urls);

                if($power != "OK"){

                    $this->error('你没有权限访问');

                }

            }

        }

        //权限检查

        protected function check_power($urls)

        {

            $action = $this->action;  //方法名

            $module = $this->module;  //模块名

            $controller = $this->controller;  //控制器名

            $urls_one = strtolower($controller.'/'.$action);

            $data = explode(',', $urls);

            $urls_id = Db::table('urls')->where(['url'=>$urls_one])->value('id');

            if($urls_id){

                if(in_array($urls_id,$data)){

                    return "OK";

                }else{

                    return "NO";

                }

            }else{

                return "OK";

            }

        }

    相关文章

      网友评论

          本文标题:Thinkphp5后台未登入拦截和权限控制

          本文链接:https://www.haomeiwen.com/subject/spqxyftx.html