########################## RBAC ################################
DROP TABLE IF EXISTS php34_privilege;
CREATE TABLE php34_privilege
(
id smallint unsigned not null auto_increment,
pri_name varchar(30) not null comment '权限名称',
module_name varchar(10) not null comment '模块名称',
controller_name varchar(10) not null comment '控制器名称',
action_name varchar(10) not null comment '方法名称',
parent_id smallint unsigned not null default '0' comment '上级权限的ID,0:代表顶级权限',
primary key (id)
)engine=MyISAM default charset=utf8 comment '权限表';
DROP TABLE IF EXISTS php34_role_privilege;
CREATE TABLE php34_role_privilege
(
pri_id smallint unsigned not null comment '权限的ID',
role_id smallint unsigned not null comment '角色的id',
key pri_id(pri_id),
key role_id(role_id)
)engine=MyISAM default charset=utf8 comment '角色权限表';
DROP TABLE IF EXISTS php34_role;
CREATE TABLE php34_role
(
id smallint unsigned not null auto_increment,
role_name varchar(30) not null comment '角色名称',
primary key (id)
)engine=MyISAM default charset=utf8 comment '角色表';
DROP TABLE IF EXISTS php34_admin_role;
CREATE TABLE php34_admin_role
(
admin_id tinyint unsigned not null comment '管理员的id',
role_id smallint unsigned not null comment '角色的id',
key admin_id(admin_id),
key role_id(role_id)
)engine=MyISAM default charset=utf8 comment '管理员角色表';
DROP TABLE IF EXISTS php34_admin;
CREATE TABLE php34_admin
(
id tinyint unsigned not null auto_increment,
username varchar(30) not null comment '账号',
password char(32) not null comment '密码',
is_use tinyint unsigned not null default '1' comment '是否启用 1:启用0:禁用',
primary key (id)
)engine=MyISAM default charset=utf8 comment '管理员';
INSERT INTO php34_admin VALUES(1,'root','bafcbdc80e0ca50e92abe420f506456b',1);
# 角色表 role
#id role_name
#-------------
# 1 a
# 2 b
# 权限表 privilege
#id pri_name
#-------------
# 1 a
# 2 b
# 3 c
# a角色拥有bc两个权限
#php34_role_privilege
#role_id pri_id
#--------------------
# 1 2 --> 1这个角色拥有2这个权限
# 1 3 --> 1这个角色拥有3这个权限
# 有以上五张表之后写SQL取出管理员ID为3的管理员所拥有的所有的权限
# 流程:1. 先取出3这个管理员所在的角色ID
# SELECT role_id FROM php34_admin_role WHERE admin_id=3
# 2. 再取出这些角色所拥有的权限的ID
# SELECT pri_id FROM php34_role_privilege WHERE role_id IN (1上面的结果)
# 3. 再根据权限ID取出这些权限的信息
# SELECT * FROM php34_privilege WHERE id IN(2的结果)
# 最终:
# SELECT * FROM php34_privilege WHERE id IN(
# SELECT pri_id FROM php34_role_privilege WHERE role_id IN (
# SELECT role_id FROM php34_admin_role WHERE admin_id=3
# )
# )
# 写法二、
# SELECT a.*
# FROM php34_privilege a,php34_role_privilege b,php34_admin_role c
# WHERE c.admin_id=3 AND b.pri_id=a.id AND b.role_id=c.role_id
# 写法三、
# SELECT b.*
# FROM php34_role_privilege a
# LEFT JOIN php34_privilege b ON a.pri_id=b.id
# LEFT JOIN php34_admin_role c ON a.role_id=c.id
# WHERE c.admin_id=3