仓酷云

标题: PHP网页设计基于原生PHP交织会员权限把持 [打印本页]

作者: 谁可相欹    时间: 2015-1-16 22:11
标题: PHP网页设计基于原生PHP交织会员权限把持
学习数据库了,MYSQL可算是PHP的黄金搭档了,不过,虽然话是这么说,你也可能恨不得把MYSQL给生吞活剥了,因为这一行一列的东东简直让自己头晕目眩。关于一个网站的背景办理体系,单一的超等办理员权限常常不克不及满意我们的需求,特别是关于年夜型网站而言,这类单一的权限会激发许很多多的成绩呈现。好比:一个网站编纂,平常他只是卖力公司网站的通告更新,但假如网站背景没有严厉的权限限定,他是否是就能够操纵到客户的一些信息,这是存在很年夜隐患的。假如学过ThinkPHP框架的伴侣必定晓得有个器材叫RBAC,明天咱不说谁人,来讲说在原生PHP言语中,怎样完成交织权限把持。好了,话未几说,老模样,间接说道理,上代码。关于权限的交织把持能够有良多种办法完成,这里只是供应一种思绪:(我接纳的是二进制数的办法)1、这里先提下按位与和按位或的运算办法:1、按位与运算符(&)列入运算的两个数据,按二进制位举行“与”运算。(“与”运算=>是不是有包括的值如:7&8=0)运算划定规矩:0&0=0;0&1=0;1&0=0;1&1=1;即:两位同时为“1”,了局才为“1”,不然为0比方:3&5即00000011&00000101=00000001因而,3&5的值得1。另,正数按补码情势列入按位与运算。2、按位或运算符()列入运算的两个工具,按二进制位举行“或”运算。(“或”运算=>能包括的值如:7=421,用“异或”往除包括如:7^2)运算划定规矩:00=0;01=1;10=1;11=1;即:列入运算的两个工具只需有一个为1,其值为1。比方:35 即0000001100000101=00000111因而,35的值得7。 另,正数按补码情势列入按位或运算。懂得了按位与和按位或的运算,我们来看上面这个例子:复制代码1<?php2define(ADD,1);//二进制13define(DELETE,2);//二进制104define(UPDATE,4);//二进制1005define(SELECT,8);//二进制100067//有权限为1,没有权限为08$admin=ADDDELETEUPDATESELECT;//11119$editor=ADDUPDATESELECT;//110110$user=SELECT;//100011?>复制代码我把增编削查分离做成了4个权限并定为常量1的二进制数是1,2的二进制数是10,4的二进制数是100,8的二进制数是1000,这里恰好成一个纪律大概有些伴侣会问下面权限变量admin,editor,user所对应的1111,1101,1000是怎样来的?PHP里有一个十进制数转二进制数的函数叫decbin()上面是对应的函数注释:复制代码decbin(PHP3,PHP4,PHP5)decbin--十进制转换为二进制申明stringdecbin(intnumber)前往一字符串,包括有给定number参数的二进制暗示。所能转换的最年夜数值为十进制的4294967295,其了局为32个1的字符串。例子1.decbin()典范<?phpechodecbin(12)."
";echodecbin(26);?>上例将输入:110011010拜见bindec(),decoct(),dechex()和base_convert()。复制代码我们来测试输入看看吧:复制代码1<?php234define(ADD,1);//二进制15define(DELETE,2);//二进制106define(UPDATE,4);//二进制1007define(SELECT,8);//二进制100089//有权限为1,没有权限为010$admin=ADDDELETEUPDATESELECT;//11111511$editor=ADDUPDATESELECT;//11011312$user=SELECT;//100081314echodecbin($admin)."<br/>";15echodecbin($editor)."<br/>";16echodecbin($user)."<br/>";171819?>复制代码输入了局:那末我们就能够使用这个运算来判别权限了,1代表有权限,0代表无权限好比:admin(超等办理员)具有的权限是增编削查也就是1111——>00001111editor(网站编纂)具有的权限是增,改,查也就是1101——>00001101user(一般用户)只具有扫瞄、查询的权限也就是1000——>00001000那末我们只需对它们举行按位与运算就能够判别是不是具有权限了比方:(从后往前看)  取十进制(数据库存储范例值)转二进制举行"与"运算网站编纂权限00001101(权限十进制为13)&00000010(删除权限十进制为2转二进制为10)  了局:00000000也就是没有具有权限再来尝尝一般用户权限00001000&00000001(增加权限十进制为1二进制为1)  了局:00000000也一样不具有权限超等办理员权限00001111&00001101(网站编纂的权限)  了局:00001101也就是具有了网站编纂的权限好了看详细实例吧我建了一个数据库,内里有2张表一张是user用户表:gid代表权限表的组id一张是权限表:flag代表增编削查的权限,可依据本人必要界说基础设置页面:config.php复制代码1<?php23define(HOST,localhost);4define(DBNAME,member);5define(USER,root);6define(PASS,);789$link=@mysql_connect(HOST,USER,PASS)ordie(数据库毗连失利);1011mysql_select_db(DBNAME,$link);1213define(ADD,1);//二进制114define(DELETE,2);//二进制1015define(UPDATE,4);//二进制10016define(SELECT,8);//二进制10001718//有权限为1,没有权限为019$admin=ADDDELETEUPDATESELECT;//111120$editor=ADDUPDATESELECT;//110121$user=SELECT;//100022?>复制代码上岸首页:index.html复制代码1<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">2<htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en">3<head>4<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">5<title>Document</title>6</head>7<body>8<formaction="action.php"method="post">9账号:<inputtype="text"name="username"/>10暗码:<inputtype="password"name="password"/>11<inputtype="submit"name="submit"value="上岸">12</form>13</body>14</html>复制代码提交页面:action.php复制代码1<?php23require_once(config.php);4$username=$_POST[username];5$password=$_POST[password];678$sql="select*fromuserasa,roleasbwherea.gid=b.gid9anda.username=$usernameandpassword=$password";1011$result=mysql_query($sql);12if($data=mysql_fetch_array($result)){13//账号考证经由过程,判别对应权限14//此处判别的是是不是具有删除权限如:user数据库存储的值为8转二进制为1000删除权限的值为2转二进制为0010与运算0000无权限15if($data[flag]&DELETE){16echo"你有删除权限";17}else{18echo"你没有删除权限";19}2021}else{22echo"毛病账号暗码";23}242526?>基础这个工具是个比较笼统的概念,如果你之前学习过c语言,c语言被认为是
作者: 若天明    时间: 2015-1-18 14:12
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
作者: 蒙在股里    时间: 2015-1-22 06:58
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者: 老尸    时间: 2015-1-30 23:32
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 深爱那片海    时间: 2015-2-6 16:59
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 分手快乐    时间: 2015-2-17 12:55
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 只想知道    时间: 2015-3-5 19:56
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 乐观    时间: 2015-3-12 14:30
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 柔情似水    时间: 2015-3-19 22:58
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2