你是设计之前最好写你的思路,你之所以出现这种情况是因为你做之前没有思考完整,而是边做边想的那种,做到那里就想到那里,所以会在这种情况时出现思绪乱的情况,以后得采用软件工程式的方式工作呀,楼主!其实我觉得你的这个设计可以这样进行:
用户表--iD,用户类型,权限标志,用户名
权限表--ID,是否可读,下载,回复,编辑,增加,删除权限标志对应权限表的id

解决方案 »

  1.   


    假设是否可读、下载、回复、编辑、添加、删除分别用以下来标志
             1     2     4     8     16    32
    普通用户 有 1, 2,4三个权限标志。如果该用户有可读,可回复,不能下载,则为1+4=5
    权限位为5假设文章是一个分类,ID为3,普通用户的角色ID为1,权限为可读,可回复,不能下载则
    建立权限表类似如下
    分类ID 角色ID        权限ID
      3       1             5用户表中有一个字段来保存他的角色ID登录后根据他的角色ID到权限表中读出该角色所应有的权限,保存在SESSION中
    判断用户是否有该权限
    define("READ",1);
    define("DOWNLOAD",2);
    define("REPLY",4)
    if ($_SESSION['permission'] & READ)
       echo "有权限";
    else
       echo "没有读的权限    
      

  2.   

    我都是用1和0来表示的
    $power = array('view','read','reply','edit');
    数据库中权限字段
    $powerStr = “1,0,1,1”
    $tmp = explode(',',$powerStr);
    foreach($power as $id=>$key)
        $user['power'][$key] = $tmp[$i];
      

  3.   

    问题好像不在于用户和权限的分配,而是在于 用户、权限、目标(各个分类)之间的分配问题,也就是说,添加进第三者了(比如各个不同等级的论坛版块),这样的话,一个用户在不同的版块应该有不同的权限,但是他又受权限表约束。
    我感觉52juanjuan(Fibona)的是一种思路,但是我又想到ice_berg16(寻梦的稻草人)那样的设计,就是说,用户有自己的权限字段,但是又有一张权限表对应字段,这是不是重复了?或者说他们有什么关系?
    至于 hahawen(变态的大龄青年),你的方法,是只在用户表上设计权限字段?我也比较喜欢将权限设置为0和1,但是这样并不能和组别,权限表,目标对应起来~~
      

  4.   

    我最近也在搞一个目录树(版块)和用户及角色的权限问题,QQ24160879,有空加我讨论一下!我是这样设计的目录树(版块):Category
    id ParentID Content RightsCode
    1   0         a          1
    2   0         b          2
    3   1         aa         3
    4   1         ab         4
    5   2         ba         5权限列表(可读101、下载102、回复103、编辑104、添加105、删除106):RightsList
    id  RightsList   Name
    1       101      可读
    2       102      下载
    3       103      回复
    4       104      编辑
    5       105      添加
    6       106      删除用户列表:UserList
    id    UserID   Username
    1       wf      王菲
    2       dh      大海用户权限列表:UserRightsList
    id     Userid    CategoryID    UserRightsList
    1         wf        5           101 102 103
    2         wf        4           101 104 106
    ---------------------------------------------
    3         wf        1              105当点击具体目录时,通过UserRightsList表读取当前用户在本目录下的权限,
    如果此用户在大版块下有权限 如第3条,那么可以把此权限继承到小版块中,
    那么wf在Category 5小版块下的权限就是101 102 103 105个人的想法,肯定不是很成熟,望指教!!!!!!!!!!!!!!!!!:)
      

  5.   

    强烈推荐,看了权限就明白了,说穿了也就这么回事
    http://feyge.l79.isdns.com/feyge/article/item_php/1024023122.htm
      

  6.   

    加我MSN,[email protected]或许能带来一点启发!
      

  7.   

    Up,有没有对此有研究的朋友出来说说多分类权限设计?看了下 Windows 的,要使添加一个组,就得在这个类表上增加一个字段,比较麻烦,对于 MySQL 还好, 对于其他数据库来说就有局限性了
      

  8.   

    必须的冗余还是要的
    栏目ID 组ID 操作
    栏目1  组1  ...
    栏目1  组2  ...
    栏目1  组3  ...
    栏目2  组1  ...
    栏目3  组1  ...
      

  9.   

    恩,但是,如果比如是版主
    只对于特定的版
    栏目ID 组ID 操作
    栏目1  会员 阅读
    栏目1  版主 阅读&编辑
    栏目2  会员 阅读&发表
    栏目2  版主 阅读&发表&编辑是不是每个版主都要对相应的栏目进行设置权限?每一个会员X每一个栏目,那就是 n*m 种可能的分配的.
      

  10.   

    这里面的问题也不是太复杂,用论坛的例子来简单的分析如下:
    目的:
      1.不同的用户拥有不同的权限,
      2.在不同的栏目里允许不同的用户进入.实现:
      1.将用户分组,组里设置最基本的权限.当然可以默认指定一些权限.比如用户组可以看帖,回帖等.
      2.如果栏目不是很多,可以用一个字段来记录,然后用分隔符隔开,但这样是规范的.如果想要得到更好的结构,那应当建立一个对应表,来记录下栏目允许的用户组.表结构:
    用户组表
    +----------+----------+-----------+-----------+
       ID           组名    权限名1      权限名2    ……
    +----------+----------+-----------+-----------+
      groupid    groupname  allow_view  allow_post  ……
    +----------+----------+-----------+-----------+
         1       普通用户      1            1       ……
    +----------+----------+-----------+-----------+
    ……论坛权限表
    +----------+----------+-----------+-----------+-----------+
       版块ID    用户组ID      版块名    权限名1      权限名2    ……
    +----------+----------+-----------+-----------+-----------+
      blockid    groupid    blockname   allow_view  allow_post   ……
    +----------+----------+-----------+-----------+-----------+
         2           1       程序设计       1           0        ……
    +----------+----------+-----------+-----------+-----------+
         2           1       电影下载       1           1        ……
    +----------+----------+-----------+-----------+-----------+……如上表所示,普通用户组本身是拥有看帖权和发帖权的,这在group表里可以设置。到了具体的版块,还可以设置针对某一个组的特殊权限。如上,普通用户组在程序设计版块只是有了看帖权,发帖权被屏蔽掉了。而在电影下载版块,他既有看帖权又有发帖权.如上所示,我们实际上可以为我们的系统加上更多的功能,如聊天,交友,这些功能用一个表是不能完成的。我们可以为其指定属于自己的权限对应表。实际上用户组这个表中的权限可以看作是这些权限对应表中的权限字段的和,只是用户组提供了一个默认值。如上的办法虽然可以处理很复杂的权限关联,但是扩展性不是太好,如果要为某一栏目加上一个权限字段,那对应的用户组表里也得加上这个字段,这大概是其最大的局限性。并且在权限判断时得要判断两次,一次是用户是否有对应的基本权限,第二次是要判断用户在指定的版块里是否有权限。这些是此法的局限性:)个人意见,仅供参考。
      

  11.   

    cullstar(我踏月色而来╰☆╮) 
    目前觉得他的思路最好了.
      

  12.   

    重新看了下 cullstar(我踏月色而来╰☆╮)  的权限分配,清晰多了,只是这样好像不适用于多个分类,x个用户,y个分类的话,理论上就要有x*y行数据。
    用户组的概念没有用到。偶然老兄的确实不错,嘿嘿,理理思路
      

  13.   

    countstars(深空)其实你说的“用户组”就是我指的“角色”,用户组只不过是一个容器,和用户及用户权限没有直接的关系!
    你可以这样做嘛,给用户组也分配权限(即权限列表RightsList中的权限),它和分配给用户的权限是一样的,然后再把用户添加到组中去。在页面中取得用户的权限,其实就是取得这个用户所在组的权限和这个用户的独立权限的“并集”!x个用户,y个分类的话,理论上就要有x*y行数据。------你说的没错,所以才把用户和权限的对应关系单独做成一个表UserRightsList,难道在数据表中的查询还不算是快的吗?当然如果有更好的解决办法,我也愿意洗耳恭听,呵呵至于表UserRightsList中的UserRightsList字段,你也可以做成100110这样的格式,每一个位代表一个权限,然后利用位运算读取权限。。但在ASP中似乎没有位运算(我没找到相关资料),所以我基本上用的都是三位或四位数字来代表一个权限!我说的方法绝对是可行的,因为我就反复用过很多次,但有些细微之处可能需要改进我还没找到更好的方法!:)
      

  14.   

    建义采用win2k的共想权限试一试!
      

  15.   

    我觉得把所有要实现得权限组都放入一个权限表里。
    表中的字段为:
    可读
    下载
    回复
    编辑
    添加
    删除往里面添加的数据,一条记录就是一个用户组。
    比如:
    先插入一条普通用户组的权限数据 INSERT INTO tablename VALUES('true','false','true','false','true','false')。
    插入管理员组的权限: INSERT INTO tablename VALUES ('true','true','true','true','true','true')这样只要调用就可以了,以后增加字段就增加了权限,改起来方便,维护更方便
      

  16.   

    呵呵,我这个就是按组来划分权限,用户表中留个ID以便确认他属于那个组,我这个只是修改组的权限,不改单个用户的权限。如果按照模块来分权限,那就把组的概念换成模块组,一个模块组里的字段以模块名称命名。数据如上面一样。如果需要更复杂些,把模块分组,不过这些都存在一张表里。用户表中存的仍是与权限表相关的ID。你要让用户组调哪个模块,就把那个组对应到权限表中的模块的值设为true,否则false。