PHP实现菜单无限极分类,无限极菜单分类实现办法

本文详细阐述了如何在项目开发中利用Role-Based Access Control (RBAC)实现后台无限极菜单,介绍了表结构设计,以及function_reSorts和getMenuShow函数在展示权限树形结构和二级菜单中的应用,便于权限管理和用户角色分配。
摘要由CSDN通过智能技术生成

在开发项目当中,后台无限极菜单的展示是无可避免的,而且也很常见。一般后台菜单也就是分为两级,最多三级,但是也有可能有多级。今天就做一个无限极菜单的实现过程的记录。

这里做的是:基于角色的访问控制(Role-Based Access

Control),在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。

先介绍下表结构:

CREATE TABLE `sp_auth` (

`auth_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,

`auth_name` varchar(30) NOT NULL COMMENT '权限名称',

`action_name` varchar(30) NOT NULL COMMENT '权限代码',

`desc` varchar(120) NOT NULL DEFAULT '' COMMENT '权限描述',

`pid` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '上级权限ID',

`sort_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '权限排序值',

`add_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',

`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE

CURRENT_TIMESTAMP COMMENT '更新时间',

`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='权限表';

处理的方法:

//打印无限极树形结构菜单展示

function _reSorts($data, $pid=0)

{

$ret = array();

foreach ($data as $k => $v) {

if($v['pid'] == $pid) {

$v['children'] = _reSorts($data, $v['auth_id']);

$ret[] = $v;

}

}

return $ret;

}

//打印二级菜单的方法

function getMenuShow($data)

{

$ret = array();

if (!is_array($data)) {

return false;

}

foreach ($data as $key => $val) {

if ($val['pid'] == 0) {

//再次遍历,将第二级别的放在作为其子菜单

foreach ($data as $k => $v) {

if ($v['pid'] == $val['auth_id']) {

$val['children'][] = $v;

}

}

$ret[] = $val;

}

}

return $ret;

}

这样就能够获取展示的菜单数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值