权限的思考:
https://www.jianshu.com/p/cf9077a7d38a
权限例子,用户 角色 功能 用户角色关联表 角色功能关联表
http://www.cnblogs.com/nuanai/p/6293344.html
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 | <?phpinclude("DBDA.class.php");//调用封装好的数据库类$db=newDBDA();//造新对象$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 | <?phpclassDBDA{public$host="localhost";//使用的什么连接,这里是本地连接方式public$uid="root";//数据库用户public$password="123";//用户的密码public$dbname="test1";//使用的数据库名//返回字符串的方法publicfunctionStrQuery($sql,$type=1){$db=newMySQLi($this->host,$this->uid,$this->password,$this->dbname);$r=$db->query($sql);//执行查询语句if($type==1){$attr=$r->fetch_all();$str="";foreach($attras$v){$str.= implode("^",$v)."|";//拼接数组为字符串}returnsubstr($str,0,strlen($str)-1);//截取字符串:最后的拼接符不显示}else{return$r;}}?> |
(4)处理页面写好了之后,就可以写主页面中,执行处理页面成功后的代码了
1 2 3 4 5 6 7 8 9 10 | success:function(data){varhang = data.split("|");//分割行varstr ="";for(vari=0;i<hang.length;i++)//循环{varlie = 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){varhang = d.split("|");//拆分行varstr ="";for(vari=0;i<hang.length;i++){ varlie = 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 | <?phpinclude("DBDA.class.php");//调用封装好的数据库类$db=newDBDA();//造新对象$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 | functionXuan(){ varuid = $("#uid").val();//找到下拉类表的值 $.ajax({url:"admain_cl2.php",//项的处理页面data:{uid:uid},type:"POST",dataType:"TEXT",success:function(b){ varhang = b.split("|");//分割行 varck = $(".ck");//找到复选项的值 ck.prop("checked",false);//清理选中 for(vari=0;i<ck.length;i++) {varzhi = ck.eq(i).val();//取出选项的值if(hang.indexOf(zhi)>=0){ ck.eq(i).prop("checked",true);//是的话就让这一项的值选中} }} })} |