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="text";  //使用的数据库名

    

    //返回字符串的方法

    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)看下这个用户的管理界面是不是有这些功能

下面是数据库中的该用户的信息表:用户和角色的表、角色表、功能表、角色和功能表

        

不难看出,该用户的登录成功后的主页面显示的是对的

不同用户登录的页面是不一样的

时间: 2024-10-13 08:23:54

php之 人员的权限管理的相关文章

MySQL数据库(7)_用户操作与权限管理、视图、存储过程、触发器、基本函数

用户操作与权限管理 MySQL用户操作 创建用户 方法一: CREATE USER语句创建 CREATE USER "用户名"@"IP地址" IDENTIFIED BY "密码"; 方法二: INSERT语句创建 INSERT INTO mysql.user(user,host, password,ssl_cipher,x509_issuer,x509_subject) VALUES('用户名','IP地址',password('密码'),'',

如何使用php设计权限管理数据库

很多网站管理员都想获得php权限,admin,或者root.但如何使用php设置管理员数据库呢? 万事开头难,这里介绍一下. 首先在B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个"非法用户"很可能就能通过浏览器轻易访问到B/S系统中的所有功能.因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让

&lt;测试用例设计&gt;用户及权限管理功能常规测试方法

1)  赋予一个人员相应的权限后,在界面上看此人员是否具有此权限,并以此人员身份登陆,验证权限设置是否正确(能否超出所给予的权限): 2)  删除或修改已经登陆系统并正在进行操作的人员的权限,程序能否正确处理: 3)  重新注册系统变更登陆身份后再登录,看程序是否能正确执行,具有权限是否正确: 4)  在有工作组或角色管理的情况下,删除包含用户的工作组或角色,程序能否正确处理: 5)  不同权限用户登录同一个系统,权限范围是否正确: 6)  覆盖系统所有权限设定: 7)  能否添加信息为空的用户

Android6.0M权限管理实战,完美轻量级封装

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53189359 本文出自[DylanAndroid的博客] Android6.0M权限管理实战,完美轻量级封装 随着Android版本的不断更新,Android再权限管理方面的诟病越来越明显.Google的Android开发人员也意识到了Android应用在权限管理方面的各种问题,让好多用户摸不着头脑就使用了用户的隐私数据. 为了在权限这方面加强管理,给用户一个比较好的体验.A

用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限

先来一堆关于上篇文章的废话(不喜者点此隐藏) 今天把博客加了个小功能,就是点标题可以隐藏或展示相关内容,做法很傻,就是引用了bootstrap的两个css类和全部的js文件,其实这样的小功能完全应该自己做的,主要还是因为前端差,还有就是懒.请大家不要太过在意命名和前端样式,我并没有进入公司工作,命名没有具体规范,都是随心所欲.前端实在太差,如果你觉得颜色样式太差,只能说明我的审美有问题,咱们主要看功能实现. 上篇文章发布后有一定的推荐量和浏量,对一个初学者来说,自认为还是挺不错的.最主要的是收到

DDDLite的权限管理

领域驱动设计实战—基于DDDLite的权限管理 在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时,很多都是偏理论方面的,常常找不到合适的例子来论证自己的观点.于是用业余时间来写点东西. 园子中的权限管理系统有以下几种: 写的好的,界面NB的,但不开源,毕竟人家辛辛苦苦的劳动成果: 写的好的,也公开源码,但不公开数据库设计和一些流程设计,你得看着源码

oracle学习之权限管理

       在创建用户之后,用户不能干任何事情,登录数据库都会报ORA-01045: user XIAOMING lacks CREATE SESSION privilege; logon denied错误.这时我们就应该给用户授权.先来了解Oracle的权限管理. 一.权限概述        Oracle数据库是利用权限来进行安全管理的,权限是Oracle安全机制重要组成部分.这些权限可以分了两类:系统权限和对象权限. 系统权限:系统权限是指在系统级控制数据库的存取和使用的机制,即执行某种语

Jenkins配置基于角色的项目权限管理

 本文将介绍如何配置jenkins,使其可以支持基于角色的项目权限管理. 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,本文将使用Role Strategy Plugin,介绍页面:https://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin 1.配置插件 安装插件后,进入系统设置页面 配置如下: 2.配置权限 在系统管理页面点击Manage and Assign Ro

Linux下用户组和权限管理

前言:此次验证操作环境为CentOS7.3,及CentOS6.9. 人员账号的管理是身为运维人员必要掌握的技能之一.其工作中的用途甚至比文件安全.软件配置更为广泛.对用户组及其相关权限有个清晰的认识,有利于我们工作学习的开展.下面就我个人理解,在此斗胆做个总结. 我们知道,当用ll或ls –l去查看目录下文件时,往往会得到如下的结果. drwxrwxr-x. 2 magedu magedu 6 Jul 21 21:03 magedu -rw-r--r--. 1 root   root   0 J