仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 7061|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页编程之权限设计及算法(PHPE)

[复制链接]
飘灵儿 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:13:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
会HTML吗?会,我能编好几个大表格排板的网页啦!设计|算法   权限设计
也许有这几种形式:
用户+组+脚色+权限
用户+组+权限
用户+脚色+权限
用户+权限


比来看了他人的设计办法,大多以“整数”来暗示权限值,如添加、阅读、删除和修正,分离用1、2、4、8这几个整数来取代,不外,大家的做法有所分歧,举例以下:
1.用2的n次幂构成权限值的纠合,如1、2、4、8、16...,某用户的权限值为其子集中的整数之和,如 7=1+2+4,5=1+4。假如要从数据库检索包括某几种权限的用户,则先把这几种权限值相加,假定和为k,然后select * from table where 1 and 用户权限值 = 'k';假如要判别某用户有哪些权限,则掏出其权限值k,分离用k&1,K&2,K&4,k&16...,假如为真,则暗示有值等于“&”右侧整数的权限,例如,假如k&4为真,则此用户有权限表中值等于4的权限;
2.用质数2、3、5、7、11...构成权限纠合,某用户的权限为其子集中各整数的乘积,如 210 = 2*3*5*7,我感觉这类办法很风趣,难点在于若何分化质因数;但我有些不认同原作者的提法,他以为权限之间能够存在包括关系,如某用户有删除权限,则其必定有阅读权限,要否则就没法删除,现实的确是如许,不外我以为如许太庞杂了,轻易失足,我感觉权限最好是“原子”的,互不搅扰,也就是说某用户有删除权限而没阅读权限则其没法停止删除操作,由于他看不到器材,处理这个抵触的关头是在给用户赋权时,把阅读权限也赋给他;
3.不必整数,而是用“向量表”办法(或许我说的纷歧定对),把一切能够的权限按必定的按次分列,如添加、阅读、修正、删除...,用户的权限值为固定100位长度的字符串,如100010100001....01,从左起每位对应一种操作权限,假如有这类权限,则此位的值为1,反之,则为0,作者之所以把用户权限值固定为100位,我想是思索到晋级成绩,但我以为这还不敷迷信,我以为用户的权限值长度应小于权限个数,举例以下:
权限分列表:添加、阅读、修正、删除,用户A有添加和阅读的的权限,则其权限值为11,用户B有阅读和修正的权限则其权限值为011,用户C有阅读和删除的权限则其权限值为0101,如许设计的优点为:当权限表中增添其余权限时,不会影响用户表或脚色表;
4.我已经的做法,在后台办理中把权限分为两大类:栏目权限和操作权限,每一个栏目对应一个目次,操作权限细分为阅读、添加、修正和删除,用户进入体系后起首判别有无栏目权限,然后判别有无操作权限,判别栏目权限绝对复杂一些,起首获得会见页面的途径path,然后分化出目次,对使用户具有的目次权限,假如此目次包括在用户有权办理的目次数组中(从数据库掏出),则其有进入此目次的权限,不然,没有,但是,在判别操作权限好象有些费事,但俄然想到添加、阅读、修正和删除与我的文件定名划定规矩是根基是对应的,但有点分歧的是,我把添加和删除的功效兼并在一个文件中了,例如文件名为proAddEdit.php,幸亏意想到修正文件时多了个传递参数id,因而,我用正则处理了这个成绩,明天看来,这类办法仿佛过时了,由于不顺应面向对象的思惟和用框架系统来开辟体系!
以上是团体深刻的熟悉和描写,如有毛病,请列位斧正,但愿高人给些定见!  
Posted by: trooman 2005-12-28 16:02
咋个这么冷僻,一个宣布点定见的都没有?  
Posted by: axgle 2005-12-28 16:05
已保藏。  
Posted by: Donyad 2005-12-28 16:41
1 2 3 的思惟是不异的,只是完成上的手段分歧罢了
而3后半局部楼主的例子,恕偶愚蠢,看不懂
3的做法是很C的,driver级别或体系级其余法式很经常使用
好比*nix下的文件权限0755 0777之类
办法1 跟 办法3 原型是如出一辙的,就是二进制位,办法3 是对这个的一个字符串摹拟
二进制 十进制
100 4
+ 1 1
------------
101 5
用互相自力的位来标记权限,就是为了原子性,素数一样具有这个特征
所以派生出2的做法,而分化质因数,我其实不以为这个会是一个成绩,由于三种办法都需求去反省所需求的权限
既然是反省,除一下所需求的质数便可
而3外面所说的要变长的成绩
1和2正好在概念上躲避了这个成绩
实践上,在C外面用二进制,有个对齐的成绩,就是要8位8位的请求,8位8位的用,无所谓太长了华侈
只是象办法3如许用字符串来摹拟二进制时会有华侈
而办法1 2在真正保留时,也是保留成一个int,也是一个请求过去就那末多位的二进制空间,无所谓华侈
扩大和弹性上,办法1和办法2是没有影响的
对办法3来讲是个成绩,那是由于办法3摹拟得欠好... 办法3感到有猪鼻子插葱之嫌
--------------
敲code多了,文字表达才能能够不可了,偶说不合错误的或说不清的中央接待人人拍砖,3q

Posted by: lihun21 2005-12-28 19:27
做个记号先
进修一下
如今还没有效到这么深的权限体系
我如今只要三种权限的用户,所以还没有思索那末多
超等办理员->通俗办理员->通俗用户
我想,我用的是这类形式
用户+权限  
Posted by: wwcCSS 2005-12-28 20:06
楼主的文章不错。Donyad兄剖析的也很有程度。   
Posted by: cozo 2005-12-28 20:10
这类器材只需一种办法就能够了。
我就只利用第一种。  
Posted by: bitQ 2005-12-28 21:47
这个办法我有看到过~~~

用二进制暗示权限,不会相互影响,等候做个触及到这个的项目
高手就是高手~~`  
Posted by: BinzyWu 2005-12-28 22:01
详细怎样标志权限 这个较无所谓
普通的体系
RBAC是已够用的.
普通Access Controller有3种
user based
group based
role based
RBAC有成熟的实际基本, 你可以搜刮以下, 能搜到良多论文.
但假如不是普通的使用体系, 那末权限体系能够设计需求较为出格. 这里只要广泛实际, 未必有广泛办法.
Posted by: terpomo 2005-12-29 00:31
进修了  
Posted by: bleakwind 2005-12-29 01:14
我对照掉队,我是将每一个人的权限构成的数组序列化放入数据库。。。
每次载入页面初始化出来。。。  
Posted by: nameless 2005-12-29 08:51
见过一个用办法3做的权限判别,操作很便利,也很天真
栏目权限用的直接把栏方针识用界定符分隔毗连,操作时判别有无这个标识,复杂,对栏目数过量且操作员过量的时分这个数据库效力应当不高(假如操作员能超越 10W 的话),呵呵  
Posted by: trooman 2005-12-29 11:18
QUOTE (nameless @ 2005-12-29 08:51)
见过一个用办法3做的权限判别,操作很便利,也很天真
栏目权限用的直接把栏方针识用界定符分隔毗连,操作时判别有无这个标识,复杂,对栏目数过量且操作员过量的时分这个数据库效力应当不高(假如操作员能超越 10W 的话),呵呵  
是的,我也以为办法3不会比二进制的效力差,在详细利用时可以用like,str_replace等,还可以摹拟二进制。
那种所谓的“栏目”权限办理,如今已过时了,但思惟仍是可以沿用的,如“对应栏目”改成“对应模块”,但完成体例已一模一样了!  
Posted by: sean.zhuo 2005-12-29 13:51
哪位年老能o我v解一下"脚色"@概念幔坎欢谗峤薪巧.  
Posted by: KnightE 2005-12-29 14:50
1和3,实质仍是一样的吧。
1有个优点,节俭空间。LZ提到开100个权限用来晋级。不外我碰到过一个超越100个权限种别的体系,并且用户树较多。所今后来压成了16进制存储(本来仍是一样),就相似1的处置办法了。
不外3最大的优点应当在于直不雅(其实假如权限项良多的话,也不直不雅了,呵呵)。
团体以为“权限贮存和判别的办法”其实还不是“权限设计”的重点和难点。咱们还需求思索其他器材。好比权限的设计布局(RBAC/GBAC/UBAC)的选择,好比权限在使用体系中的利用……
我GBAC(基于组的权限掌握)用的对照多。普通的逻辑是:
构成树型布局,用户跟组结点
判别权限,从组根目次入手下手往用户地点组停止遍历。肇端权限为“制止”
遍用时,子组权限掩盖肇端权限,直至用户。
最初用户权限掩盖肇端权限。失掉终究权限码。

固然貌似有些冗杂,不外较天真些。

其次谈谈权限的利用。凡是的做法(最少我是这么做的),即在“所需”时,依据以上逻辑判别某用户绝对某权限“是不是经由过程”,例如(乱写的,只是想暗示是在需求是停止判别):
CODE  
// when someone posts a new topic
if ($access_controller->check($user, 'post'))
{
   // access passed
   $user->post($content);
}
else
{
   // access denied
   $sys->accessDenied();
}

而我一向很想测验考试的,是如许一种权限利用办法:即在$user实例出来时,已拆卸好他具有的权限(check once, run anywhere),例如:
CODE  
class User
{
   var $sid;
   var $name;
   var $passwd;
   var $email;
   // ...
   function __call()
   {
       // it must be a ACCESS DENIED process here
       die('no permission');
   }
   // maybe no other methods here...
}
// we need overload the User class in PHP4
// for the __call magic method
overload('User');
$user = new User();
// we need a AccessInject method to inject accesses into user object
$access_controller->access_inject($user)
// then, the user object includes its access methods...
// ok, we use the user's method directly
$user->post($content);
// if the user object includes the post method, it has the right permission...

随意写了点,没有很细心思索布局和定名,但愿能表达清晰我的意思。
抛砖引玉……  
Posted by: LuciferStar 2005-12-29 17:40
做过一个表单,用法1和3保留多选的表双数据。  
Posted by: james.liu 2006-01-05 17:10
假如是面向对象的,,偏向于小K的设法
用户上岸时,,假如用户名,暗码,甚么都对的,答应他上岸时,,实例化用户信息,包含权限  
Posted by: gudai 2006-01-11 16:06
权限设计。头疼的成绩。  

         来历:http://club.phpe.net/index.php?act=Print&client=printer&f=2&t=11828

怎样学习,大家都知道编程是1门很枯燥的事业,所以大家一定要有兴趣,可能刚开始打算学的时候是因为别人说php有多好,php多么流行,但是后来伴随着学习的深入,你的这些
小妖女 该用户已被删除
沙发
发表于 2015-2-4 09:59:09 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
简单生活 该用户已被删除
板凳
发表于 2015-2-9 22:01:19 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-27 22:50:46 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
只想知道 该用户已被删除
5#
发表于 2015-3-7 04:33:38 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
变相怪杰 该用户已被删除
6#
发表于 2015-3-13 23:23:02 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
透明 该用户已被删除
7#
发表于 2015-3-20 22:08:41 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
蒙在股里 该用户已被删除
8#
发表于 2015-3-22 03:09:13 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
admin 该用户已被删除
9#
发表于 2015-3-25 15:47:29 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-4-25 06:17:46 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
飘灵儿 该用户已被删除
11#
 楼主| 发表于 2015-4-26 18:22:36 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
12#
发表于 2015-5-1 14:09:32 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
莫相离 该用户已被删除
13#
发表于 2015-5-2 22:45:43 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
冷月葬花魂 该用户已被删除
14#
发表于 2015-6-29 21:53:26 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
不帅 该用户已被删除
15#
发表于 2015-7-4 00:28:21 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
再现理想 该用户已被删除
16#
发表于 2015-7-11 20:28:13 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
分手快乐 该用户已被删除
17#
发表于 2015-7-14 05:01:49 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
爱飞 该用户已被删除
18#
发表于 2015-7-16 20:53:23 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
再见西城 该用户已被删除
19#
发表于 2015-7-18 00:38:01 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
飘飘悠悠 该用户已被删除
20#
发表于 2015-7-22 21:26:24 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-1 12:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表