• 后台账号权限功能实现思路


    每个后台用户都对应几个表:用户信息表,角色表,角色权限表,后台左侧目录节点表

    1:后台栏目都通过节点放入数据库(如下图)

    2:每个控制器都继承一个基类,基类中在构造函数中,获取session中本登录后台用户的角色id,通过这个id进行查询缓存中本用户的角色是有哪些权限

    这样用户在使用后台的方法时,会自动验证该用户有没有权限使用该方法

    class Admin extends  controller    admin是基类
    {
        public  function  _initialize()
        {
           
            parent:: _initialize();
    
            //权限验证开始
            //登陆验证
           if(empty(session("user.name"))){   name是用户名,用于前台显示
                $this->redirect(url("/store_login"));
            }else{
              if(session("user.role_id")!=1){//非超级管理员     role.id是角色id,说明本用户属于超级管理员还是普通管理员
                  $authC=new extendauth();
                  if($authC->operation()==0){
                      $this->error("没有权限!",'/admin/Index/welcome');   通过下面的auth类的方法来判断本后台账户使用的当前控制器方法有没有权限
                  }
    
              }
           }
        }

    auto类代码

    class auth{
        private $RoleId;
        public function __construct()
        {
          $this->RoleId=session("user.role_id");
        }
        //动态权限操作
        public function operation(){
            $status=0;
            $request=	hinkRequest::instance();
            $namef=$request->controller();//当前的控制器,自动获取
            $name=$request->action();// 当前的方法
            if($namef=='Login'||$namef=='Index'){
                $status=1;
            }else{
    
                $nodes=json_decode($this->GetMenuCache("ListThress_CN",3,0),true); // 所有该后台账户的权限节点,可通过数据库查节点表,此处是存入到缓存中
                if(in_array(strtolower($namef.'/'.$name),$nodes)){ 判断当前使用的控制器方法,是否在权限数组中
                    $status=1 ;
                }
            }
    
            return $status;
        }
  • 相关阅读:
    菜根谭#308
    菜根谭#307
    菜根谭#306
    菜根谭#305
    菜根谭#304
    菜根谭#303
    菜根谭#302
    菜根谭#301
    菜根谭#300
    菜根谭#299
  • 原文地址:https://www.cnblogs.com/yszr/p/11583819.html
Copyright © 2020-2023  润新知