李華平
摘要:重慶工程學(xué)院一直重視學(xué)生工程應(yīng)用能力培養(yǎng),該文以一通用系統(tǒng)框架項(xiàng)目案例庫(kù)設(shè)計(jì)與實(shí)現(xiàn),介紹了一常用的通用系統(tǒng)框架,并重點(diǎn)地論述了基于ThinkPHP框架在用戶角色權(quán)限分配及管理的設(shè)計(jì)與實(shí)現(xiàn)。為學(xué)生和工程應(yīng)用人員在設(shè)計(jì)與實(shí)現(xiàn)通用系統(tǒng)框架提供參考。
關(guān)鍵詞:通用系統(tǒng)框架;ThinkPH;角色權(quán)限管理;AOP
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)05-0082-02
我校一直重視學(xué)生工程應(yīng)用能力培養(yǎng),每年學(xué)院中程訓(xùn)練中心都要為專業(yè)開(kāi)發(fā)1至3個(gè)實(shí)訓(xùn)項(xiàng)目案例庫(kù),用以培養(yǎng)學(xué)生的工程規(guī)范和應(yīng)用能力,在一般WEB應(yīng)用管理系統(tǒng)中,一般要對(duì)用戶、角色和權(quán)限、基礎(chǔ)信息等通用功能進(jìn)行管理,此項(xiàng)目案例庫(kù)采用ThinkPHP框架作為其開(kāi)發(fā)技術(shù),完成通用框架系統(tǒng)開(kāi)發(fā),不僅讓學(xué)生了解一般應(yīng)用系統(tǒng)對(duì)系統(tǒng)用戶、角色及其權(quán)限的控制機(jī)制,掌握應(yīng)用系統(tǒng)框架的搭建,為其設(shè)計(jì)應(yīng)用系統(tǒng)提供設(shè)計(jì)參考,其設(shè)計(jì)和代碼重用性較高,甚至可以直接引用,也可以作工程訓(xùn)練中心對(duì)外進(jìn)行社會(huì)技術(shù)服務(wù)時(shí),節(jié)省項(xiàng)目開(kāi)發(fā)時(shí)間。
1 系統(tǒng)概述
此系統(tǒng)主要功能需求包括:用戶管理、角色管理、權(quán)限管理、模塊管理、系統(tǒng)登錄,考慮到實(shí)訓(xùn)周期為期1月的整體安排,本項(xiàng)目對(duì)一般系統(tǒng)框架需要考慮的系統(tǒng)日志與數(shù)據(jù)操作日志、數(shù)據(jù)庫(kù)的備份與恢復(fù)、組織架構(gòu)管理(部門管理)、員工管理等也做了刪減。系統(tǒng)功能結(jié)構(gòu)圖如圖1所示。
2 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
2.1系統(tǒng)數(shù)據(jù)庫(kù)E-R圖模型
2.2 用戶角色權(quán)限關(guān)系模型
用戶表sys_user(id,account,password,status,sysempid)
角色表sys_role(id,name)
模塊表sys_module(id,name,url,sortcode,parentid)
角色權(quán)限表sys_roleauth(rid,mid)
用戶角色關(guān)系表sys_roleuser(rid,mid)
2.3 核心功能實(shí)現(xiàn)
此項(xiàng)目案例功能主要是對(duì)部門、員工、用戶(賬號(hào))、角色、模塊(權(quán)限)進(jìn)行增、刪、改、查,并建立起相應(yīng)數(shù)據(jù)的關(guān)系,為此本文只對(duì)此項(xiàng)目案例系統(tǒng)中的關(guān)鍵核心功能和難點(diǎn)進(jìn)行論述。
2.3.1 用戶角色權(quán)限分配實(shí)現(xiàn)
用戶角色權(quán)限分配和角色權(quán)限分配都屬于在已有的兩張數(shù)據(jù)表中建立關(guān)系的操作,本以只以用戶角色權(quán)限分配為例。在ThinkPHP中有兩種方式可以進(jìn)行操作,一是建立兩張模型的多對(duì)多關(guān)系,通過(guò)多對(duì)多的關(guān)聯(lián)操作建立起兩張表數(shù)據(jù)關(guān)系;二是將多對(duì)多關(guān)系產(chǎn)生的中間表看成一個(gè)數(shù)據(jù)模型,在進(jìn)行用戶授權(quán)時(shí),首先將中間依據(jù)角色I(xiàn)D將數(shù)據(jù)清空,然后再進(jìn)行批量添加。本文采用第二種方式,效率更高,操作更簡(jiǎn)潔便于理解。
2.3.2 用戶權(quán)限管理實(shí)現(xiàn)
用戶權(quán)限管理采用的ThinkPHP的行為模式,行為(Behavior)是一個(gè)比較抽象的概念,你可以想象成在應(yīng)用執(zhí)行過(guò)程中的一個(gè)動(dòng)作或者處理,在框架的執(zhí)行流程中,各個(gè)位置都可以有行為產(chǎn)生,例如路由檢測(cè)是一個(gè)行為,小到瀏覽器檢測(cè)、多語(yǔ)言檢測(cè)等等都可以當(dāng)做是一個(gè)行為。我們把這些行為發(fā)生作用的位置稱之為標(biāo)簽(位),當(dāng)應(yīng)用程序運(yùn)行到這個(gè)標(biāo)簽的時(shí)候,就會(huì)被攔截下來(lái),統(tǒng)一執(zhí)行相關(guān)的行為,類似于AOP編程中的“切面”的概念。用戶權(quán)限管理的實(shí)現(xiàn)思路:在用戶請(qǐng)求操作前,在action_begin標(biāo)簽(位),建立權(quán)限用戶檢行為。具實(shí)現(xiàn)主要過(guò)程為:1)用戶登陸成功后,將該用戶所具有的權(quán)限全部查詢出來(lái),并存放在session中;2)編寫用戶檢測(cè)行為,獲取用戶請(qǐng)求的模塊,控制器、操作名,組成模塊中驗(yàn)證url地址(請(qǐng)求的localhost/index.php/home/index/index,我們將home/index/index請(qǐng)求路路存放到模塊的url中)先檢測(cè)此操作是否需要權(quán)限檢測(cè),如果不需檢測(cè)跳過(guò),如果需檢測(cè),判斷此請(qǐng)求路由是否在用戶所權(quán)限例表里,如存在,返回true,失敗返回false。其中的難點(diǎn)是如查詢用戶權(quán)限例表,具體可采用ThinkPHP的SQL原生態(tài)查詢、JOIN關(guān)聯(lián)查。參考代碼如下:
[ public static function getPowerList($id){
$Model = new Model(); // 實(shí)例化一個(gè)model對(duì)象
$data = $Model->query("select a.url from sys_module as a,sys_roleauth as b ,
sys_roleuser as c where a.ID=b.MID and b.RID=c.RID and c.UID=$id");
return $data;
}\&]
3 結(jié)束語(yǔ)
此通用系統(tǒng)框架項(xiàng)目案例的基本實(shí)現(xiàn)了一個(gè)通用框架的基本功能,且能夠較好、較快的應(yīng)用到的事的實(shí)際項(xiàng)目中,但此系統(tǒng)還存一定的缺陷,此通用系統(tǒng)框架只能較好的運(yùn)用在中小型管理應(yīng)用系統(tǒng)中,因?yàn)樵诮巧刂频牟粔蚣?xì)分,沒(méi)有對(duì)角色進(jìn)行分層設(shè)計(jì),權(quán)限的控制只控制到了操作層面,還可更進(jìn)一步地細(xì)化到頁(yè)面層。