作为互联网领域的“小骄傲”,直播行业已经呈现稳步上升的趋势。随着人们的需求不同,很多软件开发商在开发直播源代码时,除了需要完善前端的各种功能和界面,后台功能也是必不可少的。今天主要分享一下,关于多级代理后台权限的设定是如何实现的。

1.大部分客户需求

(1)后台提供多级代理登录

(2)上级代理可以分别设定下级代理权限

(3)公共栏目只能查看与自己代理相关的信息

2.实现方式

(1)新建后台管理角色

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

(2)当前权限判定修改,新增个人权限判定方式。

a.新建表

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

b.权限判定修改 当代理登录时通过新权限表取值判定 非代理扔用之前的判定方式。

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

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)相关功能修改(略)

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