php人员权限管理(RBAC)
在说权限管理前,应该先知道权限管理要有哪些功能:
(1)、用户只能访问,指定的控制器,指定的方法
(2)、用户可以存在于多个用户组里
(3)、用户组可以选择,指定的控制器,指定的方法
(4)、可以添加控制器和方法
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。
1.数据库的设计
写五张表,首先:用户表、角色表、功能表:
连接表的表..再来就是角色功能表与用户角色表:
2.管理员的管理页面,
(1).分别显示用户名和角色名
(2).根据下拉用户名的变化,更改相应复选框中的角色
(3).修改用户角色时,先要把用户对应角色表,这个用户所有的信息删除,再把取到的用户名和角色代号新添加。
利用下拉列表:嵌入php查询并遍历出来,以下拉列表的方式显示出来
<select id="user"><?phpinclude ("../db.class.php");$db = new db();$sql = "select * from qxyh";$arr = $db->Query($sql);foreach ($arr as $v){echo "<option value='{$v[0]}'>{$v[2]}</option>";}?>
</select>
选择角色,用多选框:
<div> 请选择角色 <?php $sjs = "select * from qxzw"; $ajs = $db->Query($sjs); foreach ($ajs as $v) {echo "<input type='checkbox' value='{$v[0]}' class='ck'/>{$v[1]} "; } ?> </div> <input type="button" value="确定" id="btn"/>
图:
当用户发生变化的时候,相应的角色也相应变化,并且改变人员的角色信息,添加保存,添加保存的基本思路是先把数据库里人员对应的角色信息全部删除,然后再取到选中的部分,添加到数据库。
先来让他选中默认角色:
<script>//选中默认角色function xuan(){var uid = $("#user").val();$.ajax({url:"chuli.php",data:{uid:uid,type:0},type:"POST",dataType:"TEXT",success:function(data){var juese = data.trim().split("|");//拆分完全都变成代号var ck = $(".ck");ck.prop("checked",false);for(var i=0;i<ck.length;i++){//便利所有的列表if(juese.indexOf(ck.eq(i).val())>=0){ck.eq(i).prop("checked",true);}}}});}</script>
来写他的处理页面:
<?php include ("../db.class.php"); $db = new db(); $type = $_POST["type"];switch ($type) {case 0:$uid = $_POST["uid"];$sql = "select jid from qxyhzw WHERE uid='{$uid}'";echo $db->strQuery($sql); break; }
我们看下最后结果,登录成功就会进入主页,登录失败会提示错误
再来,保存按钮:
<script> //当用户变化的时候去选中相应角色$("#user").change(function(){xuan();})//点击确定保存角色信息$("#btn").click(function(){var uid = $("#user").val();//找到用户名var juese = ""; // 找到角色代号var ck = $(".ck");//找到所有的checkedfor(var i=0;i<ck.length;i++){ // 遍历他if(ck.eq(i).prop("checked")){ // 如果他选中了,两个参数是改他的状态//娶过来值;加个|分割一下juese += ck.eq(i).val()+"|";}}juese = juese.substr(0,juese.length-1); // 去掉最后的| $.ajax({url:"chuli.php",data:{uid:uid,juese:juese,type:1},type:"POST",dataType:"TEXT",success:function(data){alert("修改成功");}});})}); </script>
处理页面:
<?php include ("../db.class.php"); $db = new db(); $type = $_POST["type"];switch ($type) { case 1:$uid = $_POST["uid"];$juese = $_POST["juese"];// 首先全部删掉里面的职位$sdel = "delete from qxyhzw WHERE uid = '{$uid}'";$db->Query($sdel,0);//拆分取到的字符串$arr= explode("|",$juese);foreach ($arr as $v){$sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";$db->query($sql,0);}echo "ok";break; }
看效果:
默认选中角色;
更改以后选择保存:
管理页面总代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>无标题文档</title><script src="../jquery-1.11.2.min.js"></script> </head> <body> <h1>用户与角色管理</h1> <!--显示所有用户--> <div>请选择用户 <select id="user"><?phpinclude ("../db.class.php");$db = new db();$sql = "select * from qxyh";$arr = $db->Query($sql);foreach ($arr as $v){echo "<option value='{$v[0]}'>{$v[2]}</option>";}?> </select> </div> <div> 请选择角色 <?php $sjs = "select * from qxzw"; $ajs = $db->Query($sjs); foreach ($ajs as $v) {echo "<input type='checkbox' value='{$v[0]}' class='ck'/>{$v[1]} "; } ?> </div> <input type="button" value="确定" id="btn"/></body> </html> <script type="text/javascript">$(document).ready(function(e){xuan();//当用户变化的时候去选中相应角色$("#user").change(function(){xuan();})//点击确定保存角色信息$("#btn").click(function(){var uid = $("#user").val();//找到用户名var juese = ""; // 找到角色代号var ck = $(".ck");//找到所有的checkedfor(var i=0;i<ck.length;i++){ // 遍历他if(ck.eq(i).prop("checked")){ // 如果他选中了,两个参数是改他的状态//娶过来值;加个|分割一下juese += ck.eq(i).val()+"|";}}juese = juese.substr(0,juese.length-1); // 去掉最后的|$.ajax({url:"chuli.php",data:{uid:uid,juese:juese,type:1},type:"POST",dataType:"TEXT",success:function(data){alert("修改成功");}});})});//选中默认角色function xuan(){var uid = $("#user").val();$.ajax({url:"chuli.php",data:{uid:uid,type:0},type:"POST",dataType:"TEXT",success:function(data){var juese = data.trim().split("|");//拆分完全都变成代号var ck = $(".ck");ck.prop("checked",false);for(var i=0;i<ck.length;i++){//便利所有的列表if(juese.indexOf(ck.eq(i).val())>=0){ck.eq(i).prop("checked",true);}}}});}</script>
处理页面总代码:
<?php include ("../db.class.php"); $db = new db(); $type = $_POST["type"];switch ($type) {case 0:$uid = $_POST["zhang"];$sql = "select jid from qxyhzw WHERE uid='{$uid}'";echo $db->strQuery($sql); break;case 1:$uid = $_POST["zhang"];$juese = $_POST["juese"];// 首先全部删掉里面的职位$sdel = "delete from qxyhzw WHERE uid = '{$uid}'";$db->Query($sdel,0);//拆分取到的字符串$arr= explode("|",$juese);foreach ($arr as $v){$sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";$db->query($sql,0);}echo "ok";break; }
3.登入页面:
显示很简单:
<form action="drcl.php" method="post"><div>帐号:<input type="text" name="zhang"/></div><div>密码:<input type="text" name="mi"/></div><input type="submit" value="登入"/> </form>
写登入处理
<?php session_start(); include ("../db.class.php"); $db = new db(); $zhang = $_POST["zhang"]; $mi = $_POST["mi"]; $sql = "select mi from qxyh WHERE zhang = '{$zhang}'"; $mm = $db->strQuery($sql)>0; if($mm = $mi && !empty($mi)) {$_SESSION["zhang"] = $zhang;header("location:chaxun.php"); } //else //{ // echo "登入失败"; //}
跳转到主页面,主页面代码:
每个人的主页面都是不一样的
<body> <h1>主页面</h1><?php session_start(); include ("../db.class.php"); $db = new db(); $zhang = ""; if(empty($_SESSION["zhang"])) {header("location:qx_dr.php");exit; } //登入者用户名$zhang = $_SESSION["zhang"]; //根据用户名查角色 $sql = "select jid from qxyhzw WHERE uid = '{$zhang}'"; $aql = $db->Query($sql);//根据角色代号查功能代号 $attr = array(); //定义一个存放功能代号的数组 foreach ($aql as $v) {$jsid = $v[0];// 角色代号$ssql = "select rid from qxgnzw WHERE jid='{$jsid}'";$aaql = $db->strQuery($ssql); //拆分$adai = explode("|",$aaql);foreach ($adai as $h){array_push($attr,$h);} } $attr = array_unique($attr);//去重 //显示 foreach ($attr as $k) {$ql = "select * from qxgn WHERE code = '{$k}'";$arr = $db->Query($ql);$arr[0][0];$arr[0][1];echo "<div code='{$arr[0][0]}'>{$arr[0][1]}</div>"; }?></body>
用php的用户体验不好,最好还是得用ajax
转载于:https://www.cnblogs.com/daofaziran/p/11557472.html
php人员权限管理(RBAC)相关推荐
- php实现人员权限管理(管理员界面)
控制人员权限用的最多的应该是OA办公自动化系统和像ERP,CRM,CMS这样的管理系统,就是通过控制用户的权限来控制其拥有的角色和功能,比如管理员可以拥有所有权限和功能,前台只能拥有登记和通报信息等. ...
- 权限管理——RBAC模型总结
权限管理,这是每个软件系统都会涉及到的,而且权限管理的需求本质往往都是一样,无在乎怎么的角色拥有怎样的权限,只要你充当了这个角色,你就拥有了这些功能. 举个简单例子:一个老师在学校教室她就拥有教书育人 ...
- Kubernetes(k8s)权限管理RBAC详解
文章目录 一.简介 二.用户分类 三.K8s角色&角色绑定(以ServiceAccount展开讲解) 1)授权介绍 2)角色(Role和ClusterRole) 3)角色绑定(RoleBind ...
- php实现人员权限管理(用户界面)
上一篇介绍的是管理员页面,能完成对用户的角色修改和保存,这里来说一下用户界面,用户通过登录,显示出其对应功能界面. 1.登录页面(用的ajax,也可以用php表单提交方式) <!DOCTYPE ...
- Vue3 实现 RBAC 权限管理
Vue3 实现 RBAC 权限管理 RBAC的基本概念 RBAC本质上就是一个授权的过程通过 用户 -> 角色---->资源 为啥要用RBAC 一个系统中用户是非常多的,对于不同的用户,展 ...
- 【Java从0到架构师】项目实战 - 会话管理、EhCache、JWT、权限管理 Shiro、打包部署
项目实战 - 权限管理 会话管理 客户端身份认证 - 基于 Cookie.Session 客户端身份验证 - 基于 token EhCache - 简单的缓存框架 JWT - 基于 JSON 的 to ...
- RBAC-基于角色的权限管理
RBAC-基于角色的权限管理 RBAC权限管理 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一 ...
- python用户权限管理_python---RBAC权限管理项目
设计标准一 **** 项目需求描述:这是一个真实的项目后端管理平台 要实现如下的功能: 1.在管理页面输入用户名密码,可以登陆到主页 2.不同角色的用户显示的菜单个数不同 3.同一角色用 ...
- RBAC新解 - 基于资源的权限管理
1.什么是角色 当说到程序的权限管理时,人们往往想到角色这一概念.角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么.不能做什么.用户帐号往往与角色相关联,因此,一个用户在软件系 ...
最新文章
- 关于睡眠你不可不知的十件事
- VMware中Red Hat Enterprise Linux 7 配置桥接模式局域网
- SQL*Plus中替换变量与定义变量
- Request_请求转发
- 教室工资管理系统c语言课程设计csdn,工资管理系统(C编写)
- python调用浏览器全屏_javascript、js将页面全屏的方法(兼容多浏览器)
- MongoDB异常修复
- exxi6.7如何传文件到win7_Win7文件误删如何恢复?这三种方法请收好
- Java简单方法批量修改Windows文件夹下的文件名(简单IO使用)
- 睿远基金副总经理傅鹏博:用实业思维做投资 在认知范围之内做选择
- 数据挖掘十大经典算法——Apriori
- Java - 类与对象
- nginx配置解决跨域问题
- c语言银行卡六位密码编译,用c语言生成六位的随机密码。
- 将哼唱转换为旋律音符
- js中yyyy-MM-dd格式的日期转换
- 揭密 HAP 激光雷达的实际性能表现
- IntelliJ IDEA如何整理代码格式
- 2018-8-10-控件
- Order By 排序
热门文章
- oracle 9i net基本配置
- DevExpress的DateEdit设置显示日期和时间
- GraphQL和REST对比时需要注意些什么
- 【转】Android 快捷方式的创建
- apache-shiro杂记(三) 用了apache-shiro后,HttpSession.getServletContext() API无法正常工作了...
- 11月第三周.COM增13.8万 ×××域名.XXX减9个
- 被Html的Button标签耍了一次
- [BJOI2015]树的同构
- jquery操作select(增加,删除,清空)
- AI 实验--v_JULY_v