在说权限管理前,应该先知道权限管理要有哪些功能:

  (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)相关推荐

  1. php实现人员权限管理(管理员界面)

    控制人员权限用的最多的应该是OA办公自动化系统和像ERP,CRM,CMS这样的管理系统,就是通过控制用户的权限来控制其拥有的角色和功能,比如管理员可以拥有所有权限和功能,前台只能拥有登记和通报信息等. ...

  2. 权限管理——RBAC模型总结

    权限管理,这是每个软件系统都会涉及到的,而且权限管理的需求本质往往都是一样,无在乎怎么的角色拥有怎样的权限,只要你充当了这个角色,你就拥有了这些功能. 举个简单例子:一个老师在学校教室她就拥有教书育人 ...

  3. Kubernetes(k8s)权限管理RBAC详解

    文章目录 一.简介 二.用户分类 三.K8s角色&角色绑定(以ServiceAccount展开讲解) 1)授权介绍 2)角色(Role和ClusterRole) 3)角色绑定(RoleBind ...

  4. php实现人员权限管理(用户界面)

    上一篇介绍的是管理员页面,能完成对用户的角色修改和保存,这里来说一下用户界面,用户通过登录,显示出其对应功能界面. 1.登录页面(用的ajax,也可以用php表单提交方式) <!DOCTYPE ...

  5. Vue3 实现 RBAC 权限管理

    Vue3 实现 RBAC 权限管理 RBAC的基本概念 RBAC本质上就是一个授权的过程通过 用户 -> 角色---->资源 为啥要用RBAC 一个系统中用户是非常多的,对于不同的用户,展 ...

  6. 【Java从0到架构师】项目实战 - 会话管理、EhCache、JWT、权限管理 Shiro、打包部署

    项目实战 - 权限管理 会话管理 客户端身份认证 - 基于 Cookie.Session 客户端身份验证 - 基于 token EhCache - 简单的缓存框架 JWT - 基于 JSON 的 to ...

  7. RBAC-基于角色的权限管理

    RBAC-基于角色的权限管理 RBAC权限管理 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一 ...

  8. python用户权限管理_python---RBAC权限管理项目

    设计标准一  **** 项目需求描述:这是一个真实的项目后端管理平台       要实现如下的功能: 1.在管理页面输入用户名密码,可以登陆到主页 2.不同角色的用户显示的菜单个数不同 3.同一角色用 ...

  9. RBAC新解 - 基于资源的权限管理

    1.什么是角色 当说到程序的权限管理时,人们往往想到角色这一概念.角色是代表一系列可执行的操作或责任的实体,用于限定你在软件系统中能做什么.不能做什么.用户帐号往往与角色相关联,因此,一个用户在软件系 ...

最新文章

  1. 关于睡眠你不可不知的十件事
  2. VMware中Red Hat Enterprise Linux 7 配置桥接模式局域网
  3. SQL*Plus中替换变量与定义变量
  4. Request_请求转发
  5. 教室工资管理系统c语言课程设计csdn,工资管理系统(C编写)
  6. python调用浏览器全屏_javascript、js将页面全屏的方法(兼容多浏览器)
  7. MongoDB异常修复
  8. exxi6.7如何传文件到win7_Win7文件误删如何恢复?这三种方法请收好
  9. Java简单方法批量修改Windows文件夹下的文件名(简单IO使用)
  10. 睿远基金副总经理傅鹏博:用实业思维做投资 在认知范围之内做选择
  11. 数据挖掘十大经典算法——Apriori
  12. Java - 类与对象
  13. nginx配置解决跨域问题
  14. c语言银行卡六位密码编译,用c语言生成六位的随机密码。
  15. 将哼唱转换为旋律音符
  16. js中yyyy-MM-dd格式的日期转换
  17. 揭密 HAP 激光雷达的实际性能表现
  18. IntelliJ IDEA如何整理代码格式
  19. 2018-8-10-控件
  20. Order By 排序

热门文章

  1. oracle 9i net基本配置
  2. DevExpress的DateEdit设置显示日期和时间
  3. GraphQL和REST对比时需要注意些什么
  4. 【转】Android 快捷方式的创建
  5. apache-shiro杂记(三) 用了apache-shiro后,HttpSession.getServletContext() API无法正常工作了...
  6. 11月第三周.COM增13.8万 ×××域名.XXX减9个
  7. 被Html的Button标签耍了一次
  8. [BJOI2015]树的同构
  9. jquery操作select(增加,删除,清空)
  10. AI 实验--v_JULY_v