RBAC在PHP中的实例还算可以
admin
2023-06-22 07:02:14
0

 今天找了好多案例,但是都没有发现有具体的实例。大多就是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; 


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

      RBAC在PHP中的实例还算可以


RBAC在PHP中的实例还算可以

RBAC在PHP中的实例还算可以

RBAC在PHP中的实例还算可以

RBAC在PHP中的实例还算可以


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


class Common extends Action {
function init(){
$_SESSION['user_id'2;
// P($_SESSION);
// echo '
';
// P($_SERVER['PATH_INFO']);


$arr_pathinfo explode('/',$_SERVER['PATH_INFO']);
$arr_pathinfo[2isset($arr_pathinfo[2]) $arr_pathinfo[2'index';
// P($arr_pathinfo);


$db_access=D("access");
$data_access=$db_access->query("SELECT dh_access.access_id, dh_role.role_name, dh_access.module_power, dh_module.module_name, dh_module.mvc_url FROM dh_access, dh_module, dh_role WHERE dh_access.role_id = '".$_SESSION['user_id']."' AND dh_access.module_id = dh_module.module_id AND dh_access.role_id = dh_role.role_id ","select");
echo '这里';
P($data_access);

$power false;
for($i=0;$i<count($data_access);$i++){
$mvc_url[$i$data_access[$i]['mvc_url'];
if($mvc_url[$i]==$arr_pathinfo['1']){
$power true;
switch($data_access[$i]['module_power']){
case 1:
$power_arr array('index');
break;
case 3:
$power_arr array('index','add');
break;
case 5:
$power_arr array('index','del');
break;
case 6:
$power_arr array('add','del');
break;
case 7:
$power_arr array('index','add','del');
break;
default:
$power_arr array('index');
}
if(in_array($arr_pathinfo[2],$power_arr)){
$power_action true;
}
else{
$power_action false;
}
}

}
if($power && $power_action){
return true;
}
else{
$this->error(",您现在还没有权限操作。请升级为我们的白银会员",2,'index/index','top');
}

}
     

其中 P 为打印方法 类同 print_r  
            而每个 控制器就是一个类 类里边都有增删改 或者其他的  对应的 1 查看 2 增加 修改  4 删除  那么就可以 根据 登录后 留下的session 中用户的信息提取到用户所属的角色 从而 判断 权限。 我怎么这么聪明-----
         爷是大腿 手撰 转载 请标明 谢谢

                                                                                                                                                                                      -------爷是大腿


相关内容

热门资讯

特朗普威胁对三国发动进攻,伊朗... 在美伊尚未达成协议的背景下,特朗普又将矛头转向古巴和阿曼,接连发出强硬威胁,此举引发伊朗方面的嘲讽。...
敢当警察面施暴,不仅是非法代孕... 【文/观察者网专栏作者 关心】5月26日,大象新闻记者实地调查杭州临平区一涉嫌非法代孕窝点,非法窝点...
强强联手!他们探索“AI+高能... 北京市玉泉路北京正负电子对撞机园区附近的会议室,近两年每月都会召开一场特别的组会。会议桌的两边各坐着...
A股“人形机器人第一股”要来了... 人形机器人的火越烧越旺。 宇树科技正在冲刺“人形机器人第一股”;特斯拉人形机器人Optimus亮相波...
原创 路... 文/王新喜 路撑不住,养护成本暴增40%!电车太重让全民买单,车企该改变了。 新能源车发展到今天,已...
上海专业抖音代运营公司有哪些?... 洞察上海专业抖音代运营服务:口碑公司的多维选择 在短视频爆发式增长的时代,抖音已成为企业品牌传播的...
美伊再起冲突,欧盟外长直呼:局... 美军近日对伊朗目标实施了两次打击,中东局势再度陷入紧张。欧盟外长卡拉斯认为,美伊陷入了“似战非战”的...
美国牡蛎养殖场,走出一位特朗普... ·格雷厄姆·普拉特纳。(美国《POLITICO》杂志)一个能够激发基层热情,但也带有明显政治包袱的反...
校园科技节活动在阳江一中举办 5月27日,“探天问海,智创未来”2026年校园科技节系列活动在阳江一中举办。活动通过主题讲座、科普...
男子遛狗从不拴绳,撞死人后将狗... 近日,河北邯郸女子骑行被狗撞倒身亡一事,再度引发关注。5月27日,被撞身亡女子家属告诉中国新闻周刊,...