在開發(fā)項(xiàng)目當(dāng)中,后臺(tái)無限極菜單的展示是無可避免的,而且也很常見。一般后臺(tái)菜單也就是分為兩級(jí),最多三級(jí),但是也有可能有多級(jí)。今天就做一個(gè)無限極菜單的實(shí)現(xiàn)過程的記錄。
這里做的是:基于角色的訪問控制(Role-Based Access Control),在RBAC中,權(quán)限與角色相關(guān)聯(lián),用戶通過成為適當(dāng)角色的成員而得到這些角色的權(quán)限。這就極大地簡(jiǎn)化了權(quán)限的管理。在一個(gè)組織中,角色是為了完成各種工作而創(chuàng)造,用戶則依據(jù)它的責(zé)任和資格來被指派相應(yīng)的角色,用戶可以很容易地從一個(gè)角色被指派到另一個(gè)角色。角色可依新的需求和系統(tǒng)的合并而賦予新的權(quán)限,而權(quán)限也可根據(jù)需要而從某角色中回收。角色與角色的關(guān)系可以建立起來以囊括更廣泛的客觀情況。
先介紹下表結(jié)構(gòu):
CREATE TABLE `sp_auth` (
`auth_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`auth_name` varchar(30) NOT NULL COMMENT '權(quán)限名稱',
`action_name` varchar(30) NOT NULL COMMENT '權(quán)限代碼',
`desc` varchar(120) NOT NULL DEFAULT '' COMMENT '權(quán)限描述',
`pid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '上級(jí)權(quán)限ID',
`sort_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '權(quán)限排序值',
`add_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '添加時(shí)間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
`is_delete` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否刪除(0 未刪除 | 1 已刪除)',
PRIMARY KEY (`auth_id`),
UNIQUE KEY `action_name` (`action_name`),
KEY `pid` (`pid`),
KEY `add_time` (`add_time`),
KEY `is_delete` (`is_delete`),
KEY `controller_name` (`controller_name`(6)),
KEY `auth_name` (`auth_name`(16)),
KEY `sort_id` (`sort_id`)
) ENGINE=MyISAM AUTO_INCREMENT=113 DEFAULT CHARSET=utf8 COMMENT='權(quán)限表';
處理的方法:
//打印無限極樹形結(jié)構(gòu)菜單展示<br> function _reSorts($data, $pid=0)<br> {<br> $ret = array();<br> foreach ($data as $k => $v) {<br> if($v['pid'] == $pid) {<br> $v['children'] = _reSorts($data, $v['auth_id']);<br> $ret[] = $v;<br> }<br> }<br> return $ret;<br> }<br>//打印二級(jí)菜單的方法
function getMenuShow($data)<br>{<br> $ret = array();<br> if (!is_array($data)) {<br> return false;<br> }<br> foreach ($data as $key => $val) {<br> if ($val['pid'] == 0) {<br> //再次遍歷,將第二級(jí)別的放在作為其子菜單<br> foreach ($data as $k => $v) {<br> if ($v['pid'] == $val['auth_id']) {<br> $val['children'][] = $v;<br> }<br> }<br> $ret[] = $val;<br> }<br> }<br> return $ret;<br>}
這樣就能夠獲取展示的菜單數(shù)據(jù)。

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)代碼編輯軟件(SublimeText3)