php之 人员的权限管理
1.想好权限管理的作用?
2.有什么权限内容?
3.既然有权限管理那么就会有管理员?
4.登录后每个人员的界面会是不一样的?
一、想好这个权限是什么?
就做一个就像是vip的功能,普通用户和vip用户的功能是不一样的,先来考虑一下数据库怎么设计
肯定要有用户表、还有用户所用的角色、然后就是权限功能表;可是在这里面有关联也就 是会另外有两张相互关联的表,这样也就是5张表
在数据库中建好这五张表:
(1)用户表、角色表、功能表
(2)主表中的外键关系得两个表:用户与角色表、角色与功能表
二、建好表之后就是开始写代码了,首先是管理员的页面
注意:这里只写了用户和角色的管理界面,没有写角色和功能的管理页面,但是它们都是一样的,会其一就会其二了
可以选择用户,然后根据选择复选框来给他们添加说是删除一些功能
(1)先可以显示出想要的效果:比如用户的选择可以用下拉列表
1
2
3
|
<div>请选择用户: <select id= "uid" > //给这个起个名字,可以在下面的操作中加事件<br> //这里是遍历数据库中的用户表<br> </select> </div> |
看下效果:
下拉列表中还没有值,是因为还没有进行数据库操作
(2)链接数据库操作,遍历出数据库中的用户(遍历数据库前面的随笔中已经写过很多遍了)
1
2
3
4
5
6
7
|
//只是遍历数据库就可以,不用传值的话,就不用写传值数据和传值方式了<br>$.ajax({ url: "admain_cl.php" , //用户的处理界面 dataType: "TEXT" , //返回的数据类型 success: function (data){<br> //处理页面执行成功后将要执行的代码处 } }) }); |
(3)用户的处理界面
1
2
3
4
5
6
7
|
<?php include ( "DBDA.class.php" ); //调用封装好的数据库类 $db = new DBDA(); //造新对象 $sql = "select * from users" ; //查询语句,查询用户表中的所有信息 echo $db ->StrQuery( $sql ); //执行封装类中的字符串转换方法 ?> |
封装类中的字符串转化方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?php class DBDA { public $host = "localhost" ; //使用的什么连接,这里是本地连接方式 public $uid = "root" ; //数据库用户 public $password = "511108" ; //用户的密码 public $dbname = "test" ; //使用的数据库名 //返回字符串的方法 public function StrQuery( $sql , $type =1) { $db = new MySQLi( $this ->host, $this ->uid, $this ->password, $this ->dbname); $r = $db ->query( $sql ); //执行查询语句 if ( $type ==1) { $attr = $r ->fetch_all(); $str = "" ; foreach ( $attr as $v ) { $str .= implode( "^" , $v ). "|" ; //拼接数组为字符串 } return substr ( $str ,0, strlen ( $str )-1); //截取字符串:最后的拼接符不显示 } else { return $r ; } } ?> |
(4)处理页面写好了之后,就可以写主页面中,执行处理页面成功后的代码了
1
2
3
4
5
6
7
8
9
10
|
success: function (data){ var hang = data.split( "|" ); //分割行 var str = "" ; for ( var i=0;i<hang.length;i++) //循环 { var lie = hang[i].split( "^" ); //分割列 str += "<option value='" +lie[0]+ "'>" +lie[2]+ "</option>" ; //拼接下拉列表项:想要显示的是用户名,所以表中索引是2代表了name,给这个项的值是代号,下面将会用到 } $( "#uid" ).html(str); //将值写入下拉列表中 } |
经过这4步后看下结果:数据库中用户表中的数据就可以遍历出来了
(5)用户写好之后,就是角色了,可以使用复选框的方式显示,这里还是可以用ajax,和上面一样的方法,不多说直接上代码
还是先要写个div放这个复选框
1
2
3
4
5
|
<div>请选择角色: <div id= "juese" > //遍历放值的地方 </div> </div> |
然后就是遍历数据库了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$.ajax({ url: "admain_cl1.php" , //功能的处理页面 dataType: "TEXT" , //返回的数据类型 success: function (d){ var hang = d.split( "|" ); //拆分行 var str = "" ; for ( var i=0;i<hang.length;i++) { var lie = hang[i].split( "^" ); //拆分列 str+= "<input class='ck' type='checkbox' value='" +lie[0]+ "' />" +lie[1]; //显示的复选框,索引1就是数据库中的name列 } $( "#juese" ).html(str); //将值写入div中 } }); |
角色的处理页面的代码
1
2
3
4
5
6
7
|
<?php include ( "DBDA.class.php" ); //调用封装好的数据库类 $db = new DBDA(); //造新对象 $sql = "select * from juese" ; //查询语句,查询角色表中的所有信息 echo $db ->StrQuery( $sql ); //执行封装类中的字符串转换方法 ?> |
写完之后就是运行查看下有没有错误
(6)修改完成后就是要保存了,在页面中写一个保存按钮
1
|
<input type= "button" value= "保存" id= "save" /> //给这个按钮起个名字,因为要有点击事件 |
至此,页面的显示都可以完成了
(7)这样,在就是怎么让数据库中用户本有的角色显示出来,那就是要用到下拉列表和复选框的值了
可以把他写入方法里,然后调用这个方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
function Xuan() { var uid = $( "#uid" ).val(); //找到下拉类表的值 $.ajax({ url: "admain_cl2.php" , //项的处理页面 data:{uid:uid}, type: "POST" , dataType: "TEXT" , success: function (b){ var hang = b.split( "|" ); //分割行 var ck = $( ".ck" ); //找到复选项的值 ck.prop( "checked" ,false); //清理选中 for ( var i=0;i<ck.length;i++) { var zhi = ck.eq(i).val(); //取出选项的值 if (hang.indexOf(zhi)>=0) { ck.eq(i).prop( "checked" ,true); //是的话就让这一项的值选中 } } } }) } |
(8)项值的处理页面
1
2
3
4
5
6
7
8
|
<?php include ( "DBDA.class.php" ); //调用封装好的数据库类 $db = new DBDA(); //造新对象 $uid = $_POST [ "uid" ]; //传过来的值 $sql = "select jueseid from userinjuese where userid='{$uid}'" ; //传过来的值和表中的用户值相等 echo $db ->StrQuery( $sql ); //执行封装类中的字符串转换方法 ?> |
这样,每个用户的默认角色就选中了
(9)最后就是保存修改后的值了
可以直接用全部删除在重新写入的方法来进行值的选择;对保存按钮添加单击事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
$( "#save" ).click( function (){ var uid = $( "#uid" ).val(); //找到用户的值 var ck = $( ".ck" ); //选项的值 var str = "" ; for ( var i=0;i<ck.length;i++) { if (ck.eq(i).prop( "checked" )) //选项的选中状态 { str = str+ck.eq(i).val()+ "|" ; } } str = str. substr (0,str.length-1); //截取字符串 $.ajax({ url: "admain_cl3.php" , //保存的处理页面 data:{uid:uid,js:str}, //将用户和项的值传过去 type: "POST" , //传值方式 dataType: "TEXT" , success: function (data){ if (data.trim()== "OK" ) { alert( "保存成功!" ); //保存成功后,弹出框 } } }); }) |
保存的处理页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php include ( "DBDA.class.php" ); //调用的封装类 $db = new DBDA(); //造新对象 //传过来的用户和选项的值 $uid = $_POST [ "uid" ]; $js = $_POST [ "js" ]; $sdelete = "delete from userinjuese where userid='{$uid}'" ; //全部删除将用户代号和用户相等的 $db ->Query( $sdelete ,0); //执行语句 $attr = explode ( "|" , $js ); foreach ( $attr as $v ) { $sql = "insert into userinjuese values('','{$uid}','{$v}')" ; //修改表中的值 $db ->Query( $sql ,0); //执行语句 } echo "OK" ; |
这个管理员的页面到这也就结束了,整体的看下结果:
1.默认还没有进行修改的这个用户
2.进行修改之后的这个用户,单击保存后弹出保存成功对话框
二、管理员页面弄好之后,就是登陆页面了,用户的登录页面很简单,不多说了,直接上代码
(1)登录的基本显示:都是些基本语句
1
2
3
4
|
<h1>用户登录</h1> <div>账号:<input type= "text" id= "uid" /></div> <div>密码:<input type= "password" id= "pwd" /></div> <div><input type= "button" value= "登录" id= "btn" /></div> |
(2)这里登录,我们也用ajax进行登录吧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$( "#btn" ).click( function (){ //对登录按钮添加单击事件 var uid=$( "#uid" ).val(); //获取用户的值 var pwd=$( "#pwd" ).val(); //获取密码的值 $.ajax({ url: "logincl.php" , //编写登录的处理页面 data:{uid:uid,pwd:pwd}, //将用户和密码传到处理页面 type: "POST" , dataType: "text" , success: function (data) { if (data.trim()== "OK" ) { window.location.href= "main.php" ; //处理页面执行成功后,跳转到主页面 } else { alert( "用户名密码输入错误" ); //否则就提示错误 } } }) }) |
(3)看下处理页面的编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?php session_start(); //开启session include ( "DBDA.class.php" ); //调用封装的类 $db = new DBDA(); //造新对象 //传过来的值 $uid = $_POST [ "uid" ]; $pwd = $_POST [ "pwd" ];<br> //查询语句 $sql = " select pwd from users where uid='{$uid}' and pwd='{$pwd}' " ; //执行语句 $attr = $db ->Query( $sql ); if (! empty ( $pwd ) && ! empty ( $attr ) && $attr [0][0]== $pwd ) { $_SESSION [ "uid" ] = $uid ; //session接收用户值 echo "OK" ; } else { echo "ON" ; } ?> |
最后,我们看下最后结果,登录成功就会进入主页,登录失败会提示错误
三、登录成功的主页面:每个用户的主页面应该是不一样的
(1)既然后session,那就先将session开启
1
2
3
4
5
6
7
8
9
10
11
|
<?php session_start(); //开启session if ( empty ( $_SESSION [ "uid" ])) //判断session是否为空 { header( "location:login.php" ); //空的话就返回登录页面 } else { echo $_SESSION [ "uid" ]; //否则就输出用户名 } ?> |
(2)我这里是写了个表用来装遍历出来的功能表:可以给这个表加点样式
1
2
3
|
<table id= "t" width= "7%" cellpadding= "0" cellspacing= "0" border= "1" > </table> |
(3)ajax传值了:下面的语句代表什么意思上面用的时候都将了很多遍了,就不重复说明了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
$.ajax({ url: "main_cl.php" , //主页面的处理页面 dataType: "TEXT" , success: function (data){ var hang = data.split( "|" ); var str = "" ; for ( var i=0;i<hang.length;i++) { var lie = hang[i].split( "^" ); str += "<tr><td>" +lie[0]+ "</td></tr>" ; //因为处理页面中只找了name,所以索引就是0 } $( "#t" ).html(str); //将值写入表中 } }) |
主页面的处理页面
1
2
3
4
5
6
7
8
9
10
|
<?php session_start(); //开启session $uid = $_SESSION [ "uid" ]; //接收session传过来的值 include ( "DBDA.class.php" ); $db = new DBDA(); //这个是用到的相关子查询方法 $sql = "select name from rules where code in (select ruleid from juesewithrules where jueseid in (select code from juese where code in (select jueseid from userinjuese where userid='{$uid}')))" ; //执行语句 echo $db ->StrQuery( $sql ); ?> |
最后就是可以登录显示不一样用户权限功能的页面了,看下整体结果:
(1)登录一个用户,进入主页
(2)看下这个用户的管理界面是不是有这些功能
下面是数据库中的该用户的信息表:用户和角色的表、角色表、功能表、角色和功能表
不难看出,该用户的登录成功后的主页面显示的是对的
不同用户登录的页面是不一样的
php之 人员的权限管理的更多相关文章
- php之 人员的权限管理(RBAC)
1.想好权限管理的作用? 2.有什么权限内容? 3.既然有权限管理那么就会有管理员? 4.登录后每个人员的界面会是不一样的? 一.想好这个权限是什么? 就做一个就像是vip的功能,普通用户和vip用户 ...
- php实现人员的权限管理
权限是指不同的人员登录以后会用不同的页面. 一.想好这个权限是什么? 肯定要有用户表.还有用户所用的角色.然后就是权限功能表:可是在这里面有关联也就 是会另外有两张相互关联的表,这样也就是5张表 在数 ...
- php人员权限管理(RBAC)
在说权限管理前,应该先知道权限管理要有哪些功能: (1).用户只能访问,指定的控制器,指定的方法 (2).用户可以存在于多个用户组里 (3).用户组可以选择,指定的控制器,指定的方法 (4).可以添 ...
- php实现人员权限管理(管理员界面)
控制人员权限用的最多的应该是OA办公自动化系统和像ERP,CRM,CMS这样的管理系统,就是通过控制用户的权限来控制其拥有的角色和功能,比如管理员可以拥有所有权限和功能,前台只能拥有登记和通报信息等. ...
- 领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net
在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时, ...
- struts2学习之旅三 权限管理和导航设计
1,权限管理的db设计和dao实现,尽量简单快速有效: db的设计如下:权限按照角色来赋给用户: 权限对应每一个具体的功能,有菜单级别的,有导航级别的,还有页面级别的功能: 涉及到权限的敏感操作一般都 ...
- 简单的Linux的用户权限管理
企业生产环境用户权限集中管理方案案例 建立中要添加如下的项目经验: 在了解公司业务流程后,提出权限整改解决方案,改进公司超级用户Root权限泛滥的问题. 我首先写好方案后,给老大看,取得老大的支持后, ...
- php 简单权限管理实现
权限管理介绍.与简单实现思想 权限管理 此函数为模块访问权限管理 实现思路为:根据传进来的权限值,进入不同的权限获取区间,然后根据模块名字判断是否有这个模块的访问权限 使用说明:在每一个模块开始之前调 ...
- C# EasyUI树形结构权限管理模块
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节和大家探讨下C#使用EasyUI树形结构/Tree构 ...
随机推荐
- JAVA常见算法题(五)
package com.xiaowu.demo; /** * 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. * * * @ ...
- python xml与字典的相互转换
def trans_xml_to_dict(xml): """ 将微信支付交互返回的 XML 格式数据转化为 Python Dict 对象 :param xml: 原始 ...
- sqoop使用记录
sqoop简介 Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具.它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实 ...
- 2017.3.31 spring mvc教程(五)Action的单元测试
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 将 xml 文件 转为 DataTable
private static DataTable CreateDataTable(string table) { DataSet dataSet = new DataSet(); string dat ...
- 【转载】json对象的使用
使用JSON 进行数据传输 一.选择的意义 在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.为了更好的使用ajax, 我们将学习一种有用的数据格式 JavaScript O ...
- WebLogicSSL解决苹果IOS itms下载问题
前提: 安装好openssl工具. 通过windows cmd 命令进入 openssl工作文件夹 如解压文件夹为:E:\ openssl-1.0.2-beta1 则工作文件夹为E:\openssl- ...
- 从Java视角理解CPU缓存和伪共享
转载自:http://ifeve.com/from-javaeye-cpu-cache/ http://ifeve.com/from-javaeye-false-shari ...
- MapReduce Input Split 输入分/切片
MapReduce Input Split(输入分/切片)详解 public static long getMaxSplitSize(JobContext context) { return cont ...
- 第3章 如何编写函数定义 3.7 if特殊表
这部分来学习下if特殊表,之前学了defun和let,不好意思,博客中没有写但是鄙人已经看了,哈哈. 什么是if表 if条件特殊表是为了让计算机对条件加以判断,然后选择不同的执行路径的. if特殊表的 ...