|
今天找了好多案例,但是都没有发现有具体的实例。大多就是TP里边的简单例子,现在我根据看到的几篇文章对RBAC有了自己的观点。下边是我的心得和例子。
直白点想要做好权限管理就首先要深层理解其含义。
我的理解就是现今流行的游戏定义: RBAC 中有 用户----用户组----角色----权限----操作
而在游戏中有:
----玩家(这里可以当做用户)
----大区或区域(这里可以看做用户组)
----职业(这里可以当做角色)
----技能(这里可以当做权限)
----技能点(可以当做操作具有的操作越多说明技能越多权限越大)
根据这些关系我们来建表:
后台用户表(其中关于权限的是 role_id 和group_id)--------这就是玩家了
DROP TABLE IF EXISTS `dh_bus_user`;
CREATE TABLE `dh_bus_user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`bus_no` int(6) unsigned NOT NULL,
`bus_name` varchar(40) NOT NULL,
`bus_pwd` varchar(60) NOT NULL,
`bus_integral` int(8) unsigned NOT NULL DEFAULT '1000',
`bus_qq` int(12) unsigned DEFAULT NULL,
`bus_phone` varchar(13) NOT NULL,
`bus_adress` varchar(60) NOT NULL,
`bus_position_x` float(5,2) unsigned NOT NULL DEFAULT '112.32',
`bus_position_y` float(5,2) unsigned NOT NULL DEFAULT '80.55',
`bus_allow` smallint(4) unsigned NOT NULL DEFAULT '742',
`bus_level` smallint(2) unsigned NOT NULL DEFAULT '3',
`role_id` int(5) unsigned NOT NULL DEFAULT '7' COMMENT '角色ID',
`group_id` int(5) unsigned NOT NULL DEFAULT '1001' COMMENT '用户组id',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `bus_no` (`bus_no`),
UNIQUE KEY `bus_name` (`bus_name`),
KEY `bus_user` (`bus_no`,`bus_name`,`bus_pwd`,`bus_phone`,`bus_adress`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
用户组表--------这就是大区了这个可能不是太重要,但当你的系统复杂时就需要了
DROP TABLE IF EXISTS `dh_user_group`;
CREATE TABLE `dh_user_group` (
`group_id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`group_name` varchar(50) NOT NULL,
`role_id` int(5) unsigned NOT NULL,
PRIMARY KEY (`group_id`),
UNIQUE KEY `groupname` (`group_name`),
KEY `user_group` (`group_name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
角色表-------通过给用户分配角色就等于 你注册游戏后选择职业差不多
DROP TABLE IF EXISTS `dh_role`;
CREATE TABLE `dh_role` (
`role_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`role_name` varchar(60) NOT NULL,
PRIMARY KEY (`role_id`),
UNIQUE KEY `rolename` (`role_name`),
KEY `role` (`role_name`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
权限表--------每一个角色会对应多个权限(其中module_power 为 1 2 4组合的num 这样就和Linux的权限一样了有多个组合)
DROP TABLE IF EXISTS `dh_access`;
CREATE TABLE `dh_access` (
`access_id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`role_id` int(5) unsigned NOT NULL,
`module_id` int(5) unsigned NOT NULL,
`module_power` smallint(2) unsigned NOT NULL DEFAULT '1' COMMENT '具体权限',
PRIMARY KEY (`access_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
操作--------一个操作就是一个控制器 (可以看做是技能数,然后看管理员怎么给你点技能) 其中MVC_URL 很重要这将是判断你是否有这个技能的重要条件。
DROP TABLE IF EXISTS `dh_module`;
CREATE TABLE `dh_module` (
`module_id` int(5) unsigned NOT NULL AUTO_INCREMENT,
`module_name` varchar(60) NOT NULL,
`mvc_url` varchar(60) NOT NULL,
PRIMARY KEY (`module_id`),
UNIQUE KEY `module_name` (`module_name`),
UNIQUE KEY `mvc_url` (`mvc_url`),
KEY `module` (`module_name`,`mvc_url`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
所有表建完后添加数据如下
最后 在php中调用
我这里选择 BROPHP 的一个框架 基本就算是smarty的一个框架 所以是经典的MVC模式
在后台的 common.php 中加入代码测试 代码如下: 【里边的是代码】
【
|
|
|