xiuxuan 发表于 2018-12-16 08:16:28

RBAC在PHP中的实例还算可以

  今天找了好多案例,但是都没有发现有具体的实例。大多就是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为 124组合的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 中加入代码测试代码如下: 【里边的是代码】

页: [1]
查看完整版本: RBAC在PHP中的实例还算可以