先科普一波RBAC:
BAC(Role - Based Access Control)相关程序中,把一段静态url作为节点,存入数据库,然后和用户以及角色关联。以此用来控制用户的访问权限
RBAC(Role - Based Access Control) in the related program, using a static URL as nodes, in the database, and then associate users and roles.To control user access permissions
简单来说,我写的这个代码就是就是把controller名和里面的function名存入数据库
存了所有url,接口,方便做权限控制。
数据库结构如下,一看就明白:
CREATE TABLE `crm_adm_node` (
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`title` varchar(50) NOT NULL DEFAULT '',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1正常 2禁用 0删除',
`remark` varchar(255) NOT NULL DEFAULT '',
`sort` smallint(6) unsigned NOT NULL DEFAULT '0',
`pid` smallint(6) unsigned NOT NULL DEFAULT '0',
`level` tinyint(1) unsigned NOT NULL DEFAULT '0',
`group_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
`js_page` varchar(255) NOT NULL DEFAULT '' COMMENT 'JS页面',
`js_icon` varchar(255) NOT NULL DEFAULT '' COMMENT '样式名',
PRIMARY KEY (`id`),
KEY `level` (`level`) USING BTREE,
KEY `pid` (`pid`) USING BTREE,
KEY `status` (`status`) USING BTREE,
KEY `name` (`name`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=609 DEFAULT CHARSET=utf8 COMMENT='节点表';
程序递归遍历所有controller文件,然后用ReflectionClass取出类和方法名,然后存入数据库。
程序用的是thinkphp 3.2框架,其他框架也大同小异。
代码:
https://github.com/chan17/PHPCodeHubChan17/blob/master/AddURL_for_access_control.php