1.文章权限arcrank
2.人权限M_Rank
如果用户权限!=100 (管理用户)
文章权限!=0
人权限=文章权限 才能阅读(本部门的)
1.游客权限为0,文章权限为开放浏览0,随便看,不可看有权限的文章。
2.用户为一般用户,权限为办公室权限,
可以看开放浏览,泰安分局,不可以看其他科室权限的文章。
3.用户为管理员,对所有文章有权查看。
因此控制逻辑如下:
用户权限如果是科室的话就是11 12 13.... 对应member表的rank字段
相应的文章权限如果是本部门就需要同样是11 12 13 对应arctype和archives表corebank的字段
3.1 先判断文章权限是否>10(即本部门浏览),就需要判断登录用户是否与文章权限一致。
3.2 如果文章权限为注册用户或者开放浏览,只需要判断用户权限是否>文章权限即可
4.测试
下载天地:泰安分局
视频点播:办公室
领导讲话:信息科
5.测试通过
arctype 开放浏览 corank=0;
corank 10 注册会员
访问时,从member表中读取用户rank 100
判断用户权限是否>阅读权限
如果> 允许阅读
如果< 不允许阅读
如果阅读权限='本部门',比如1.5
则读取改用户所在的用户部门 是否等于 文章作者的用户部门
编辑文章用户:
$urank = $cuserLogin->getUserRank();
只允许赋予100<该用户权限的权限
$dsql->SetQuery("Select * from #@__arcrank where adminrank<='$urank'");
1.增加/编辑用户部门
1.1新建部门表dede_depart
1.2 dede_admin 和 dede_memeber 表增加departId字段标识部门ID
1.3在sys_admin_user.add.htm 和xx.edit.htm表中增加部门选择字段
1.4 修改 add.php和edit.php的sql语句来更新部门ID
1.5 这里注意下id=1 即用户为admin时不修改部门号
1.6 删除用户只删除了admin表,没有删除member表,
导致再次新增用户时报“用户已存在”,需要修改下删除逻辑。
arctype 开放浏览 corank=0;
corank 10 注册会员
访问时,从member表中读取用户rank 100
判断用户权限是否>阅读权限
如果> 允许阅读
如果< 不允许阅读
如果阅读权限='本部门',比如1.5
则读取改用户所在的用户部门 是否等于 文章作者的用户部门
编辑文章用户:
$urank = $cuserLogin->getUserRank();
只允许赋予100<该用户权限的权限
$dsql->SetQuery("Select * from #@__arcrank where adminrank<='$urank'");
1.增加/编辑用户部门
1.1新建部门表dede_depart
1.2 dede_admin 和 dede_memeber 表增加departId字段标识部门ID
1.3在sys_admin_user.add.htm 和xx.edit.htm表中增加部门选择字段
1.4 修改 add.php和edit.php的sql语句来更新部门ID
1.5 这里注意下id=1 即用户为admin时不修改部门号
1.6 删除用户只删除了admin表,没有删除member表,
导致再次新增用户时报“用户已存在”,需要修改下删除逻辑。
2.设置阅读权限表arcrank表
增加相应的部门权限
注册会员改为泰安分局权限
3.修改plus/list.php代码
//文章阅读权限>10,用户权限>10&&!=100 则只有相等才能阅读
if( $lv->Fields['corank']>10 &&$cfg_ml->M_Rank>10 &&$cfg_ml->M_Rank!=100 && $cfg_ml->M_Rank != $lv->Fields['corank'] )
{
$dsql->Execute('me' , "SELECT * FROM `#@__arcrank` ");
while($row = $dsql->GetObject('me'))
{
$memberTypes[$row->rank] = $row->membername;
}
$memberTypes[0] = "游客或没权限会员";
$msgtitle = "你没有权限浏览栏目:{$lv->Fields['typename']} !";
$moremsg = "这个栏目需要 <font color='red'>".$memberTypes[$lv->Fields['corank']]."</font> 才能访问,你目前是:<font color='red'>".$memberTypes[$cfg_ml->M_Rank]."</font> !";
include_once(DEDETEMPLATE.'/plus/view_msg_catalog.htm');
exit();
}else if($cfg_ml->M_Rank < $lv->Fields['corank']){
$dsql->Execute('me' , "SELECT * FROM `#@__arcrank` ");
while($row = $dsql->GetObject('me'))
{
$memberTypes[$row->rank] = $row->membername;
}
$memberTypes[0] = "游客或没权限会员";
$msgtitle = "你没有权限浏览栏目:{$lv->Fields['typename']} !";
$moremsg = "这个栏目需要 <font color='red'>".$memberTypes[$lv->Fields['corank']]."</font> 才能访问,你目前是:<font color='red'>".$memberTypes[$cfg_ml->M_Rank]."</font> !";
include_once(DEDETEMPLATE.'/plus/view_msg_catalog.htm');
exit();
}
4.修改/plus/view.php代码
//会员级别不足
if(($needRank>10 && $cfg_ml->M_Rank>10 && $cfg_ml->M_Rank!=100 && $cfg_ml->M_Rank != $needRank && $arc->Fields['mid']!=$cfg_ml->M_ID))
{
$dsql->Execute('me' , "SELECT * FROM `#@__arcrank` ");
while($row = $dsql->GetObject('me'))
{
$memberTypes[$row->rank] = $row->membername;
}
$memberTypes[0] = "游客或没权限会员";
$msgtitle = "你没有权限浏览文档:{$arctitle} !";
$moremsg = "这篇文档需要 <font color='red'>".$memberTypes[$needRank]."</font> 才能访问,你目前是:<font color='red'>".$memberTypes[$cfg_ml->M_Rank]."</font> !";
include_once(DEDETEMPLATE.'/plus/view_msg.htm');
exit();
}
else if(($needRank>1 && $cfg_ml->M_Rank < $needRank && $arc->Fields['mid']!=$cfg_ml->M_ID))
{
$dsql->Execute('me' , "SELECT * FROM `#@__arcrank` ");
while($row = $dsql->GetObject('me'))
{
$memberTypes[$row->rank] = $row->membername;
}
$memberTypes[0] = "游客或没权限会员";
$msgtitle = "你没有权限浏览文档:{$arctitle} !";
$moremsg = "这篇文档需要 <font color='red'>".$memberTypes[$needRank]."</font> 才能访问,你目前是:<font color='red'>".$memberTypes[$cfg_ml->M_Rank]."</font> !";
include_once(DEDETEMPLATE.'/plus/view_msg.htm');
exit();
}
5.修改article.edit.html archives.do.php 及archives.edit.htm
阅读权限的选择部分
如果是信息发布员,只能选择
本科室,注册人员,开放浏览
有话要说...