开发直播源代码时关于多级代理后台权限的设定

作为互联网领域的“小骄傲”,直播行业已经呈现稳步上升的趋势。随着人们的需求不同,很多软件开发商在开发直播源代码时,除了需要完善前端的各种功能和界面,后台功能也是必不可少的。今天主要分享一下,关于多级代理后台权限的设定是如何实现的。
1.大部分客户需求
(1)后台提供多级代理登录
(2)上级代理可以分别设定下级代理权限
(3)公共栏目只能查看与自己代理相关的信息
2.实现方式
(1)新建后台管理角色
开发直播源代码时关于多级代理后台权限的设定
(2)当前权限判定修改,新增个*限判定方式。
a.新建表
开发直播源代码时关于多级代理后台权限的设定
b.权限判定修改 当代理登录时通过新权限表取值判定 非代理扔用之前的判定方式。
开发直播源代码时关于多级代理后台权限的设定

  public function check($uid,$name,$relation='or') {
    	if(empty($uid)){
    		return false;
    	}
    	if($uid==1){
    		return true;
    	}
        if (is_string($name)) {
            $name = strtolower($name);
            if (strpos($name, ',') !== false) {
                $name = explode(',', $name);
            } else {
                $name = array($name);
            }
        }	
		$user = $this->getUserInfo($uid);//获取用户信息,一维数组	
        $list = array(); //保存验证通过的规则名
  		if($user['isagent'] == 1){
			$auth_access_model=M("AuthAccessUsers");
			
			$join = C('DB_PREFIX').'auth_rule as b on a.rule_name =b.name';
			
			$rules=$auth_access_model->alias("a")->join($join)->where(array("a.uid"=>array("in",$uid),"b.name"=>array("in",$name)))->select();	
		}else{       
			$role_user_model=M("RoleUser");
			$role_user_join = C('DB_PREFIX').'role as b on a.role_id =b.id';		$groups=$role_user_model->alias("a")->join($role_user_join)->where(array("user_id"=>$uid,"status"=>1))->getField("role_id",true);
			
			if(in_array(1, $groups)){
				return true;
			}
			if(empty($groups)){
				return false;
			}
			$auth_access_model=M("AuthAccess");		
			$join = C('DB_PREFIX').'auth_rule as b on a.rule_name =b.name';	
	$rules=$auth_access_model->alias("a")->join($join)->where(array("a.role_id"=>array("in",$groups),"b.name"=>array("in",$name)))->select();
        }
        foreach ($rules as $rule){
        	if (!empty($rule['condition'])) { //根据condition进行验证	
        		$command = preg_replace('/\{(\w*?)\}/', '$user[\'\\1\']', $rule['condition']);
        		//dump($command);//debug
        		@(eval('$condition=(' . $command . ');'));
        		if ($condition) {
        			$list[] = strtolower($rule['name']);
        		}
        	}else{
        		$list[] = strtolower($rule['name']);
        	}
        }
 		if($relation == 'or'){
			$rulesall=M("auth_rule")->where("1")->select();
			$bak = 0;		
			foreach($rulesall as $k=>$t){
				if(strtolower($t['name']) == $name[0]){
					$bak = 1;		
					break;
				}
			}
			if($bak == 0){
				  return true;
			}
		}       
        if ($relation == 'or' and !empty($list)) {
            return true;
        }
        $diff = array_diff($name, $list);
        if ($relation == 'and' and empty($diff)) {
            return true;
        }
        return false;
    }

c.用户表建立代理判定字段,写代理注册方法,此处略去。
d.仿照角色权限修改方法 写相关的修改权限方法。
e.角色权限禁止删除(防止删除后影响功能)。
(3)公共栏目的私人数据处理 由于代理的私人数据是下属用户,那么直接在adminbase类_initialize方法中 直接查询下属用户id方便下属用户查询。

 function _initialize(){
       parent::_initialize();
       $this->load_app_admin_menu_lang();
    	if(isset($_SESSION['ADMIN_ID'])){
    		$users_obj= M("Users");
    		$id=$_SESSION['ADMIN_ID'];
    		$user=$users_obj->where("id=$id")->find();
    		if(!$this->check_access($id)){
    			$this->error("您没有访问权限!");
    			exit();
    		}
			$this->isagent_type = $user['isagent'];
			if($user['isagent']>0){
				$agentinfo=M('admin_level')->where("upid = {$id} or uid = {$id}")->getField('uid',true);
				$where['upid']=array(
					'IN',$agentinfo
				);
				$where['isaent'] = 0;
	$userlist=M("users")->where($where)->getField('id',true);
				$userlist[]='0';
				$this->agent_userlist = $userlist;
			}
    		$this->assign("admin",$user);
    	}else{
    		//$this->error("您还没有登录!",U("admin/public/login"));
    		if(IS_AJAX){
    			$this->error("您还没有登录!",U("admin/public/login"));
    		}else{
    			header("Location:".U("admin/public/login"));
    			exit();
    		}
    	}
    }

(4)相关功能修改(略)
以上就是开发直播源代码过程中,多级代理后台权限设定的实现方式。直播之所以如此火爆,前端的功能设计是一方面,后台的权限管理也是用户们实实在在需要的。因此,如果想从互联网领域长久发展的话,还是需要注意前后端功能设计相结合这一问题的。