<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post/234/</link>
<title><![CDATA[ 权限设计及算法]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[Web 技术 ]]></category>
<pubDate>Thu, 29 Mar 2007 03:25:02 +0000</pubDate> 
<guid>https://atim.cn/post/234/</guid> 
<description>
<![CDATA[ 
	权限设计<br/><br/>大概有这几种模式：<br/>用户+组+角色+权限<br/>用户+组+权限<br/>用户+角色+权限<br/>用户+权限<br/><br/><br/>最近看了别人的设计方法，大多以“整数”来表示权限值，如添加、浏览、删除和修改，分别用1、2、4、8这几个整数来代替，不过，各人的做法有所不同，举例如下：<br/><br/>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的权限；<br/><br/>2.用质数2、3、5、 7、11...组成权限集合，某用户的权限为其子集中各整数的乘积，如 210 = 2*3*5*7,我觉得这种方法很有趣，难点在于如何分解质因数；但我有些不认同原作者的提法，他认为权限之间可能存在包含关系，如某用户有删除权限，则其一定有浏览权限，要不然就没法删除，事实确实是这样，不过我认为这样太复杂了，容易出错，我觉得权限最好是“原子”的，互不干扰，也就是说某用户有删除权限而没浏览权限则其无法进行删除操作，因为他看不到东西，解决这个矛盾的关键是在给用户赋权时，把浏览权限也赋给他；<br/><br/>3.不用整数，而是用“向量表”方法（也许我说的不一定对），把所有可能的权限按一定的顺序排列，如添加、浏览、修改、删除...，用户的权限值为固定100位长度的字符串，如100010100001....01，从左起每一位对应一种操作权限，如果有这种权限，则此位的值为1，反之，则为0，作者之所以把用户权限值固定为100位，我想是考虑到升级问题，但我认为这还不够科学，我认为用户的权限值长度应小于权限个数，举例如下：<br/>权限排列表：添加、浏览、修改、删除，用户A有添加和浏览的的权限，则其权限值为11，用户B有浏览和修改的权限则其权限值为011，用户C有浏览和删除的权限则其权限值为0101，这样设计的好处为：当权限表中增加别的权限时，不会影响用户表或角色表；<br/><br/>4. 我曾经的做法，在后台管理中把权限分为两大类：栏目权限和操作权限，每个栏目对应一个目录，操作权限细分为浏览、添加、修改和删除，用户进入系统后首先判断有没有栏目权限，然后判断有没有操作权限，判断栏目权限相对简单一些，首先获取访问页面的路径path，然后分解出目录，对应用户拥有的目录权限，如果此目录包含在用户有权管理的目录数组中（从数据库取出），则其有进入此目录的权限，否则，没有，然而，在判断操作权限好象有些麻烦，但突然想到添加、浏览、修改和删除与我的文件命名规则是基本是对应的，但有点不同的是，我把添加和删除的功能合并在一个文件中了，例如文件名为 proAddEdit.php，幸好意识到修改文件时多了个传递参数id，于是，我用正则解决了这个问题，今天看来，这种方法似乎过时了，因为不适应面向对象的思想和用框架体系来开发系统！
]]>
</description>
</item><item>
<link>https://atim.cn/post/234/#blogcomment249</link>
<title><![CDATA[[评论]  权限设计及算法]]></title> 
<author>lee &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 30 Mar 2007 01:33:15 +0000</pubDate> 
<guid>https://atim.cn/post/234/#blogcomment249</guid> 
<description>
<![CDATA[ 
	好高深啊.我都不研究那么多
]]>
</description>
</item><item>
<link>https://atim.cn/post/234/#blogcomment251</link>
<title><![CDATA[[评论]  权限设计及算法]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 30 Mar 2007 04:26:22 +0000</pubDate> 
<guid>https://atim.cn/post/234/#blogcomment251</guid> 
<description>
<![CDATA[ 
	哈哈<br/>发现在有一个不错的<br/>就是第一个方案
]]>
</description>
</item>
</channel>
</rss>