標籤:style blog http java color 使用 os 資料
許可權管理,就是給不同的使用者指派不同的許可權。當使用者登入或者操作時候進行判斷,來阻止使用者進行許可權以外的操作。本次講的是當使用者登入一刻,只顯示許可權開啟的內容。
一、建立資料庫。
1、許可權表funcla。來儲存錄入所有許可權,也是避免因許可權名稱修改了,許可權失效的問題。
2、管理員表admin。主要儲存管理使用者名等資訊。
3、管理員對應許可權表funadmin。主要儲存已開啟的管理員id與許可權id。
二、輸出許可權列表。
1、通過管理員列表進入許可權分配。
2、許可權分配列表。
關於許可權分配列表,因為許可權板塊的不同,我們需要區別頂級分類與其子集。並且還需要顯示許可權狀態。在許可權狀態判斷中也使用了一層迴圈判斷。代碼中採用了三層嵌套迴圈輸出。具體代碼如下。
1 <div>分配管理員{$username}的許可權</div> 2 <table width="100%" border="0" cellpadding="0" cellspacing="0" class="list_table mt10"> 3 <tr> 4 <th>許可權名稱</th> 5 <th>狀態</th> 6 7 </tr> 8 <volist name="funcla" id="v" key="j"> 9 <tr class="tr">10 <td>{$v.claname}</td>11 <td><input <volist name="funadmin" id="d"><if condition="$d[‘funclaid‘] eq $v[‘id‘]">checked</if></volist> type="checkbox" id="{$v.id}" name="{$userid}" onchange="return setfun(this,seturl)" /></td>12 </tr>13 <volist name="fun" id="vo">14 <if condition="$vo[‘clapid‘] eq $v[‘id‘]">15 <tr class="tr">16 <td style="padding-left: 40px;" >{$vo.claname}</td>17 18 <td>19 20 <input <volist name="funadmin" id="d"><if condition="$d[‘funclaid‘] eq $vo[‘id‘]">checked</if></volist> type="checkbox" id="{$vo.id}" name="{$userid}" onchange="return setfun(this,seturl)" />21 22 </td>23 24 </tr>25 </if>26 </volist>27 </volist>28 </table>View Code
迴圈樣本圖如:
3、具體控制器如下:
1 public function setfun(){ 2 $uid=I(‘get.id‘,0,‘int‘); 3 $a=M(‘admin‘); 4 $user=$a->where(array(id=>$uid))->field(‘username,id‘)->find(); 5 6 $this->username=$user[‘username‘]; 7 $this->userid=$user[‘id‘]; 8 9 $m=M(‘funcla‘);10 $funcla=$m->where(array(clapid=>‘0‘))->field(true)->select();11 $fun=$m->field(true)->select();12 $this->fun=$fun;13 $this->funcla=$funcla;14 15 $fd=M(‘funadmin‘);16 $funadmin=$fd->where(array(adminid=>$uid))->field(true)->select();17 $this->funadmin=$funadmin;18 $this->display();19 }View Code
4、js。當使用者權限發生改變時,即觸發js提交json,向控制器傳遞資料參數。
1 function setfun(t,u){ 2 var id=$(t).attr(‘id‘); 3 var uid=$(t).attr(‘name‘); 4 var type=$(t).is(":checked")?1:0; 5 var url=u; 6 $.ajax({ 7 url:url, 8 type:‘post‘, 9 data:{10 id:id,11 type:type,12 uid:uid13 },14 success:function(data){15 },16 error:function(data){17 }18 19 })20 }View Code
json傳遞的url地址用過頁面中執行個體化地址擷取。如:
1 <script type="text/javascript">2 var seturl="{:U("Admin/chanefun")}";3 </script>View Code
三、控制器擷取json的資料參數,判斷許可權的添加與修改。如果是添加,就向funadmin表中添加受理許可權人id與要授權的許可權id作為一條資料。修改即刪除合格一條資料。同理。
1 public function chanefun(){ 2 3 $m=M(‘funadmin‘); 4 $where[‘funclaid‘]=I(‘post.id‘,0,‘int‘); 5 $where[‘adminid‘]=I(‘post.uid‘,0,‘int‘); 6 $type=I(‘post.type‘,0,‘int‘); 7 if(empty($type)){ 8 $oid=$m->where($where)->getfield(‘id‘); 9 $m->delete($oid);10 return;11 }12 $m->data($where)->add();13 }View Code
四、真實許可權判斷。前面都是為許可權判斷做準備的,現在才是真正的判斷,基本原理是把要判斷的許可權名稱與當前登入使用者id拿到funadmin表中對比,如有發現則,說明該使用者有許可權,即顯示,否則影藏。影藏了是看不到連結地址,但是如果知道地址則可以通過地址直接存取。
(1)前台判斷顯示與否。調用了自訂方法chackQ();
1 <if condition="chackQ(‘任務管理‘)">2 <li><a href="{:U(‘taskinfo/dir‘)}">任務管理</a></li>3 </if>View Code
(2) 具體對比操作。
1 function chackQ($name,$state=false){ 2 if(!$state){ exit; } 3 $fun=M(‘funcla‘); 4 $funclaid=$fun->where(array(claname=>$name))->getfield(‘id‘); 5 $m=M(‘funadmin‘); 6 $adminid=session(‘admin_userid‘); 7 $reset=$m->where(array(funclaid=>$funclaid,adminid=>$adminid))->find(); 8 if(empty($reset)){ 9 echo "你沒有許可權";10 exit;11 }12 return $reset;13 }View Code
至此,整個許可權控制基本完成。