程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> yotaku的開發日志(1),yotaku開發日志

yotaku的開發日志(1),yotaku開發日志

編輯:關於PHP編程

yotaku的開發日志(1),yotaku開發日志


2015-12-18 21:17:46

連續看了幾天的ThinkPHP框架,目前看到基於角色的用戶訪問權限控制。

 相關代碼如下:

數據庫

用戶表(管理員)

 

mg_idmg_namemg_pwdmg_timemg_role_id 0 creatint 123 2587413547 1 1 yotaku 123 258744984 4
CREAATE TABLE `sw_manager` (
    `mg_id` int(11) NOT NULL AUTO_INCREMENT,
    `mg_name` varchar(32) NOT NULL,
    `mg_pwd` varchar(32) NOT NULL, 
    `mg_time` int(10) unsigned NOT NULL COMMENT '時間',
    `mg_role_id` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '角色id',
    PRIMARY KEY (`mg_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

權限表

auth_id(權限ID)auth_name(權限名稱)auth_pid(父id)auth_c(控制器)auth_a(操作方法)auth_path(全路徑)auth_level(權限級別) 100 產品中心 0 '' '' 100 0 101 產品展示 100 ManagerController show 100-101 1
CREATE TABLE `sw_auth` (
    `auth_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
    `auth_name` varchar(20) NOT NULL COMMENT '權限名稱',
    `auth_pid` smallint(6) unsigned NOT NULL COMMENT'父id',
    `auth_c` varchar(32) NOT NULL DEFAULT '' COMMENT '控制器',
    `auth_a` varchar(32) NOT NULL DEFAULT '' COMMENT '操作方法',
    `auth_path` varchar(32) NOT NULL COMMENT '全路徑',
    `auth_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '級別',
    PRIMARY KEY(`auth_id`)
) ENGING-InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

角色表

role_idrole_namerole_auth_idsrole_auth_ac 0 站主 1,3,9 操作器-控制器,操作器-控制器,... 1 高級管理員 1,2,3,9,12 操作器-控制器,操作器-控制器,...
CREATE TABLE `sw_role` (
    `role_id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
    `role_name` varchar(20) NOT NULL COMMENT '角色名稱',
    `role_auth_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '權限id,1,3,..',
    `role_auth_ac` text COMMENT '控制器2-操作3,控制器1-操作6,...',
    PRIMARY KEY(`role_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 


數據模擬:

1.權限數據

  產品中心(產品展示,最新產品,分類管理,子類管理) 高級管理(用戶留言,留言簿,產品訂購,文件管理) 系統管理(基本設置,樣式管理,首頁設置,管理員列表)

頂級權限
insert into sw_auth values ( 100,'產品中心',0,'','',100,0 );
insert into sw_auth values ( 101,'高級管理',0,'','',101,0 );
insert into sw_auth values ( 102,'系統管理',0,'','',102,0 );
insert into sw_auth values ( 103,'權限管理',0,'','',103,0 );

次級權限
insert into sw_auth values ( 104,'產品展示',100,'Goods','show','100-104',1 );
insert into sw_auth values ( 105,'最新產品',100,'Goods','showlist','100-105',1 );
insert into sw_auth values ( 106,'分類管理',100,'Goods','cate','100-106',1 );

insert into sw_auth values ( 107,'用戶留言',101,'Goods','words','101-107',1 );
insert into sw_auth values ( 108,'留言簿',  101,'Goods','wordsbook','101-108',1 );

insert into sw_auth values ( 109,'基本設置',102,'Goods','set','102-109',1 );
insert into sw_auth values ( 110,'樣式管理',102,'Goods','css','102-110',1 );

insert into sw_auth values ( 111,'用戶列表',103,'Goods','userlist','103-111',1 );
insert into sw_auth values ( 112,'角色管理',103,'Goods','role','103-112',1 );
insert into sw_auth values ( 113,'權限列表',103,'Goods','auth','103-113',1 );

2.角色數據

  sw_role 站主 所有權限(103,104,105,106,107,108,109) 管理員 部分權限(104,105,109) 版主 部分權限(103,108)

角色
insert into sw_role values (10,'站主','100,101,102,103,104,105,106,107,108,109,110,111,112,113','Goods-show,Goods-showlist,Goods-cate,Goods-words,Goods-wordsbook,Goods-set,Goods-css');
insert into sw_role values (11,'管理員','100,102,104,105,109','Goods-showlist,Goods-cate,Goods-css');
insert into sw_role values (12,'版主','100,101,103,106,108,113','Goods-show,Goods-set');

3.流程說明

  Index控制器內 獲取用戶的角色id,進而獲得角色權限 進行判斷是否展現數據 Index控制器--->left方法--->left.html模板 Index控制器

//(1)根據用戶id獲取本身記錄信息
        $mg_id = session('admin_id');
        
//D('Manager')實例化了一個Manager的Model對象
        $manager_info = D('Manager')->find($mg_id);
        $role_id = $manager_info['mg_role_id'];
        
//(2)根據role_id 獲得本身記錄信息
        $role_info = D('Role')->find($role_id);
        $auth_ids = $role_info['role_auth_ids'];
        
//(3)根據$auth_ids 獲得具體權限
        $auth_infoA = D('Auth')->where("auth_level=0 and auth_id in($auth_ids)")->select();
//父級
        $auth_infoB = D('Auth')->where("auth_level=1 and auth_id in($auth_ids)")->select();
//子級
        $this->assign('auth_infoA',$auth_infoA);
        $this->assign('auth_infoB',$auth_infoB);
        
//傳到模板中
        $this->assign('auth_info',$auth_info);
        $this->display();

4.模板 left.html

  {foreach $auth_infoA as $k=>$v}     <table cellspacing=0 cellpadding=0 width=150 border=0> <tr height=22><td>      background={$smarty.const.ADMIN_IMG_URL}/menu_bt.jpg ><a class=menuparent onclick=expand({$v.auth_id})       href="javascript:void(0);">{$v.auth_name}</a></td></tr> <tr height=4><td></td></tr>     </table>     <table id=child{$v.auth_id}>      {foreach $auth_infoB as $k2=>$v2}         {if $v2.auth_pid == $v.auth_id}           <tr height=20><td align=middle width=30><img height=9 src="{$smarty.const.ADMIN_IMG_URL}/menu_icon.gif" width=9></td>           <td><a class=menuchild href="{$smarty.const.__MODULE__}/{$v2.auth_c}/{$v2.auth_a}" target=right>{$v2.auth_name}           </a></td></tr>          {/if}       {/foreach}       <tr height=4> <td colspan=2></td> </tr>     </table>   {/foreach}  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved