In Entwicklungsprojekten ist die Anzeige des Backend-Infinitus-Menüs unvermeidlich und sehr häufig. Im Allgemeinen ist das Hintergrundmenü in zwei Ebenen unterteilt, bis zu drei Ebenen, es können jedoch auch mehrere Ebenen vorhanden sein. Heute werde ich den Implementierungsprozess des Infinitus-Menüs protokollieren.
Was hier geschieht, ist: Rollenbasierte Zugriffskontrolle. In RBAC werden Berechtigungen mit Rollen verknüpft, und Benutzer erhalten die Berechtigungen dieser Rollen, indem sie Mitglieder der entsprechenden Rollen werden. Dies vereinfacht die Verwaltung von Berechtigungen erheblich. In einer Organisation werden Rollen erstellt, um verschiedene Aufgaben zu erledigen, und Benutzern werden basierend auf ihren Verantwortlichkeiten und Qualifikationen entsprechende Rollen zugewiesen. Benutzer können problemlos von einer Rolle zur anderen zugewiesen werden. Rollen können basierend auf neuen Anforderungen und der Systemintegration neue Berechtigungen gewährt werden, und Berechtigungen können bei Bedarf auch von einer Rolle zurückgefordert werden. Beziehungen zwischen Charakteren können so aufgebaut werden, dass sie ein breiteres Spektrum objektiver Umstände abdecken.
Führen Sie zunächst die folgende Tabellenstruktur ein:
CREATE TABLE `sp_auth` (
`auth_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`auth_name` varchar(30) NOT NULL COMMENT 'Authority name',
`action_name` varchar( 30) NOT NULL COMMENT 'Berechtigungscode',
`desc` varchar(120) NOT NULL DEFAULT '' COMMENT 'Berechtigungsbeschreibung',
`pid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT ' Überlegene Berechtigungs-ID',
`sort_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Permission sort value',
`add_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'Zeit hinzufügen ',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Update time',
`is_delete` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'Ob gelöscht werden soll (0 nicht gelöscht | 1 hat Löschen)',
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='Permission Table';
Verarbeitungsmethode:
//打印无限极树形结构菜单展示<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>//打印二级菜单的方法
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> //再次遍历,将第二级别的放在作为其子菜单<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>}
Auf diese Weise erhalten Sie die angezeigten Menüdaten.