设为首页 收藏本站
查看: 908|回复: 0

[经验分享] RBAC在PHP中的实例还算可以

[复制链接]

尚未签到

发表于 2018-12-16 08:16:28 | 显示全部楼层 |阅读模式
  今天找了好多案例,但是都没有发现有具体的实例。大多就是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;
  

          所有表建完后添加数据如下
         DSC0000.jpg


DSC0001.jpg

DSC0002.jpg

DSC0003.jpg

DSC0004.jpg

  

  最后 在php中调用
        我这里选择 BROPHP 的一个框架  基本就算是smarty的一个框架 所以是经典的MVC模式
在后台的 common.php 中加入代码测试  代码如下: 【里边的是代码】



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-651856-1-1.html 上篇帖子: PHP正则表达式简介 下篇帖子: php 序列化对象
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表