• 权限控制 模式


    项目基于thinkphp 框架 权限控制模式,基于节点控制

    1 基于角色的权限控制,角色自由创建自定义。
    2 用户模型 需要一个字段确定 用户所基于的角色。
    3 节点配置文件node.php 定义节点数组

    案例
    <?php
    return array(
    'home'=>array(
    'name'=>'后台主页',
    'nodeType'=>'c',
    'nodes'=>array('Admin.Index.index','Admin.Index.count')
    ),
    'access'=>array(
    'name'=>'更新缓存',
    'nodeType'=>'c',
    'nodes'=>array('Admin.Index.cache')
    ),
    'bbs'=>array(
    'name'=>'论坛浏览',
    'nodeType'=>'c',
    'nodes'=>array('Bbs.Admin.list_cont','Bbs.Admin.index','Bbs.Admin.view')
    ),
    ?>

    4 函数 验证节点

    /*
    *权限判定函数
    */
    function access_r($uid,$app,$m,$a){
    $nodes = include('./node.php'); //节点数组
    $thisNode =$app.'.'.$m.'.'.$a;
    //dump($thisNode);
    foreach($nodes as $key=>$value){
    //dump($value['nodes']);
    if(in_array($thisNode,$value['nodes'])){
    $no = array('key'=>$key,'name'=>$value['name'],'nodeType'=>$value['nodeType']);
    }
    }
    // if(!is_array($no)){return true;}//没有这个节点跳出
    //检查是否是管理员
    if(M('member')->where(array('uid'=>$uid))->getField('uid')==1){return true;}
    $userInfo = M('member')->where(array('username'=>$uid))->find();

    // if($userInfo['cid'] =='' || $userInfo['cid'] ==0){return false;}
    // $cinfo = M('company')->where(array('cid'=>$userInfo[cid]))->find();
    // if($cinfo['uid'] == $uid){return true;}

    //检查是否分配权限
    // $where['username'] = $uid;
    $where['zid'] = $userInfo['zid'];
    //$where['jid'] = $userInfo['jid'];
    $where['_logic'] = 'or';
    $map['_complex'] = $where;
    //$map['cid'] = $userInfo[cid];
    $map['key'] = $no['key'];

    if(is_array(M('access')->where($map)->find())){return true;}//有赋予权限跳出

    return false;
    }

    5 ,底层控制器验证那些权限 action
    [php]
    function __construct() {
    //权限控制
    if($_GET['app']=='Admin' or MODULE_NAME=="Admin"){
    if(!access_r($this->mid,$_GET[app],MODULE_NAME,ACTION_NAME)){
    $this->error('没有权限');
    };
    }
    }

    基于

  • 相关阅读:
    DB2高可用hadr搭建参数配置
    redis一主两从搭建
    hdu 1064 Financial Management(超级大水题)
    hdu 1009 FatMouse' Trade(贪心水题)
    文件选择性加密解密
    uva 10405 Longest Common Subsequence(最长公共子序列)
    UVa 111 History Grading (最长公共子序列)
    hdu 2550 百步穿杨(大水题)
    UVa 10066 The Twin Towers(LCS水题)
    ASP.NET学习参考站点
  • 原文地址:https://www.cnblogs.com/freefei/p/3235000.html
Copyright © 2020-2023  润新知