PHP.45-TP框架商城应用实例-后台20-权限管理-RBAC表构造与代码生成
权限管理
三张主表{p39_privilege(权限)、p39_role(角色)、p39_admin(管理)}
两张中间表{p39_role_pri(角色-权限)、p39_admin_role(管理-角色)}
注:权限表与角色表为多对多关系,管理与角色表为多对多关系
1、建表语句
/********* 权限表 *********/ drop if exists p39_privilege; create table p39_privilege ( id mediumint unsigned not null auto_increment comment 'Id', pri_name varchar(30) not null comment '权限名称', module_name varchar(30) not null default '' comment '模块名称', controller_name varchar(30) not null default '' comment '控制器名称', action_name varchar(30) not null default '' comment '方法名称', parent_id mediumint unsigned not null default '0' comment '上级权限Id', primary key (id) )engine=InnoDB default charset=utf8 comment '权限'; /********* 角色-权限表 *********/ drop if exists p39_role_pri; create table p39_role_pri ( pri_id mediumint unsigned not null comment '权限Id', role_id mediumint unsigned not null comment '角色Id', key pri_id (pri_id), key role_id(role_id) )engine=InnoDB default charset=utf8 comment '角色权限'; /********* 角色表 *********/ drop if exists p39_role; create table p39_role ( id mediumint unsigned not null auto_increment comment 'Id', role_name varchar(30) not null comment '角色名称', primary key (id) )engine=InnoDB default charset=utf8 comment '角色'; /********* 管理-角色表 *********/ drop if exists p39_admin_role; create table p39_admin_role ( admin_id mediumint unsigned not null comment '管理Id', role_id mediumint unsigned not null comment '角色Id', key admin_id (admin_id), key role_id(role_id) )engine=InnoDB default charset=utf8 comment '管理角色'; /********* 管理表 *********/ drop if exists p39_admin; create table p39_admin ( id mediumint unsigned not null auto_increment comment 'Id', username varchar(30) not null comment '用户名', password char(32) not null comment '密码', primary key (id) )engine=InnoDB default charset=utf8 comment '管理员'; INSERT INTO p39_admin(id,username,password) VALUES(1, 'root', '21232f297a57a5a743894a0e4a801fc3');
注:管理员表中插入一个超级管理员账号,没有角色,拥有所有权限
2、使用GII代码生成器生成三个主表的代码
p39_privilege修改配置,去掉搜索功能代码
p39_role配置,不要搜索
p39_admin配置, 只留用户名搜索
3、添加管理员是,密码加密
4、超级管理员不能删除,且页面不显示删除按钮
5、修改管理员时,密码留空则不修改密码【即修改用户名功能】
修改表单验证规则,修改时可以为空,添加时不能为空,直接删除密码长度验证
修改前判断是否修改密码