to  zairwolfi(君子兰) 要不是判断的话,那不是等于没有设定权限了?to 老大 你一说怎么又这么高深啊?怎么我不懂了呢?我觉得我这样子的权限分配好像有点儿不太好,只是不知道不好在哪里?因为我找不到更好的,这是跟我领导讨论出来的,可能他也不在行.

解决方案 »

  1.   

    用户组表中不应该体现该组对应的栏目/版块编号等字段
    这些应该在权限表中体现,
    权限表定义如下即可组ID    栏目编号    权限
    2        3          4
    3        3          2
    2        4          1这里权限可以使用位来操作,如1表示读取,2表示修改,4表示删除
    这样用户登录时找出该用户所在组(假设为2 ),在到权限表中取出该组的所有权限
    select * from privilege where groupId = 2然后将用户的权限保存在session中
      

  2.   

    从数据库中读的时候是这样的
    $privilege = array();
        while ($array = mysql_fetch_array($res))
        {
    $key = $array["catId"];
    $value = $array["operation"];
    $privilege[$key] = $value;
        }
    $_SESSION["privilege"] = $privilege;
    ----------------------------------------------
    看看我的栏目定义
    //=========== 定义系统栏目的名称和编号 =========//
    define("SYSTEM", 1); //系统设置
    define("WEBSITE", 2); //网站管理
    define("PRODUCT", 3); //产品管理
    define("MEMBER", 4); //会员管理
    define("ORDER", 5); //订单管理
    define("ACCOUNT", 6); //帐户管理
    define("STATISTIC", 7); //查询统计
    define("USER" ,8); //用户管理
    //=========== 定义权限位 =======================//
    define("VIEW", 1); //查看权限
    define("MODIFY", 2); //修改权限
    define("DELETE", 4); //删除权限
    -----------------------------------------
    上面栏目的编号即对应数据库的栏目编号最后是判断
    //判断用户对网站管理栏目有修改的权限
    if ($_SESSION['privilege'][WEBSITE] & MODIFY)
           echo "有权限";
      

  3.   

    ice_berg16(寻梦的稻草人),那样的话,权限表也太多内容了。
    比如有十个版块,那得多少对应记录?设置这些记录的时候不更麻烦?
      

  4.   

    稻草人的意思是不是要我在用户分组表里每个栏目根据不同的权限产生不同的记录,也就是说一个栏目有几种操作权限就有几条记录,里有栏目ID和权限等主要字段?请看我下面的表结构,这是和我头讨论的.用户分组表:t_usergroup
    分组信息,可以自行添加各组的操作权限
    字段名 类型 标签名 说明
    cgroupid varchar(10) ID号
    cgroupname varchar(20) 组名称 按科室分组
    cgroupright varchar(255) 权限栏目 哪些栏目可以被该组用户操作上面的表,我原本和头讨论的,只想列出该组对哪些栏目可以操作,但没有指明可以操作哪些权限,具体的权限分配在权限表里,这样子也方便了个性化的权限.
    所以上表只是为了表明用户属于哪个组,并没有实质性的权限分配.

    权限表:t_right
    字段名 类型 标签名 说明
    crightid  varchar(10) ID号
    cusername  varchar(50) 用户名 拥有权限的用户
    ctopicid  varchar(10) 栏目ID
    ctopicright varchar(255) 权限字段 用’|’分隔各权限字符

    权限表里存的就是用户对某栏目的操作权限,看权限字段的说明.
    这样子对于一个用户来说,他如果有操作栏目的权限的话,就添加一条该用户对该栏目的权限记录.
      

  5.   

    “用户个性化的权限,这个我觉得总的一条规律是用户的权限不能超过组的权限”
    我也经常认为是这样,但这违背了一个事实。如果“组”没有写权限,那没“用户”就不可能有写权限,也就是“用户”不能在此系统中发布信息。这样是不是合理呢?其实linux文件系统的权限设置是很好的范例
    我们知道他的权限设置是这样的:
    类型 - 文件主 - 组 - 一般用户
     [d] - rwx - rwx - rwx
    d 表示目录,目录中的文件继承目录的属性
    他分为三个级别,而每个级别上都是可以单独设置的
    ntfs也采用类似的管理机制,比他还要细当试图操作某一文件时,依次检查用户是否是文件主-是否与文件主同组-...,分别取得对应的权限后进行操作楼主的思路与此很相似,完全可以套用此机制。并把权限分布到所有的记录上
    这样就可以必每次都要检索是否有权限了
      

  6.   

    老大,我这个用户组上没有设置权限啊,只是指明了这个用户组对应哪些栏目,然后给该用户组里用户分配一定的权限,这样子个性化的权限也就不难了,反正权限都在权限表里声明.我对LINUX不熟悉,让我来理解一下老大刚才讲的.
    我的思路已经在上页陆续讲过.
    我有点儿发现,在我的用户组里应该加上权限才对,
    那用户组里的用户权限少于等于该组的权限.
    但有个问题,要是栏目无限分类的话,那权限又会是怎么样子的呢?
      

  7.   

    看了大家的讨论好像都差不多!我最近也在写一个关于权限的!我是这样子设计的?
    有一个组表:
    组id       权限 一个用户的权限表,有三个字段
    用户id    权限right     switch
    switch(0或1表示用户在所属组的权限基础上有没有增加或减少额外的权限,若有改变的话值就为1,没有就办0,有改变就用用户的方式来判断,没有就有组的方式来判断) 
    权限(为一字符串)比如有十个栏目那么权限字段相对应的值是(0111012320)
    字符串中的第一个字符代表某个栏目的操作等!依次类推!
    当用用户登陆后把权限和组id各用户id存在session或者是cookie里。
    在网页程序里头,对某个操作都进行权限判断
    比如对栏目一是这样进行判断的!
    首先对switch进行判断,若为0,那么就可以用组方式来判断,这时对应的操作都有一个权值,比如8传过来,这时就判断权限字符串中第8个字符的值是多少,比如可以这样0为浏览,1为修改,2为删除!
    若switch为1则用用户的方式来判断,同理!
    当然这样的话设计的时候可能会麻烦一点,不过这样可以对用户和组进行比较好的管理!若要增加一个新的栏目就在权限字符串再增加一位!这样可以减少对数据库的访问次数!
    这是我的设想,请大家批批!同时也请大家讲讲windows里的组策略是怎么设计的!
      

  8.   

    xuzuning(唠叨) 
    说的很好,太妙了,那会是个多大的系统啊,我看国内的b/s还没有达到.......
    个人建议,讨论!!!
      

  9.   

    唠叨的linux权限系统的概念,和ftp上传文件的时候的那个属性设置一样,就是三位数,000到777,每一位对应着一个用户组。不过我想不懂这个和程序的权限有什么关系。按照那种说法,那一个类型就要一条记录。在一个版里面的文章,不得一条对应着一个记录?
    作者和版主,都有对帖子的修改权限的啊。这个怎么在权限系统里面设定?我觉得应该是这样的:  用户组       权限    版块
    1.普通用户   阅读发贴  普通
    2.认证用户   阅读发贴  所有 
    3.版主       加删除等  某个
    4.管理员     加删除等  所有应该是这样设置的。但是疑问如下:
    1、帖子作者怎么分配权限?
    2、版主作为一个组的话,那不同版的版主的版块是不同的,这个怎么写“版块”字段?
      

  10.   

    个人觉得,两个表应该够了。
    一个权限表,Flag字段就表示权限大小。
    ID     Flag
    1        1
    2        2
    3        3
    4        4
    ...一个用户表,就用权限表的Flag就行了。
      

  11.   

    忽然想起你的这个讨论是延续前几次的
    我也依然继续我的思路我一开始就讲到,“权限表的设计与权限的算法有着密切的关系”。权限也就是那么几个,如何将他们与用户组织在一起,这实际上是和算法是有关的。
    在一个管理系统中,
    非注册用户只能有读权限,有时甚至连读权限都没有。
    每个用户都有在自己的版面的全部权限,
    可以赋予组用户修改权,
    但一般不赋予删除权。
    特殊设定的权限可能要精细到数据表的记录
    基于这样的考虑,已经没有必要设置单独的权限表了,而把权限字分配到数据表的每条记录
    建立用户表并保存组关系还是必要的,栏目与组挂钩。组成员在不与该组挂钩的版面被视为一般用户。
    所以在数据表中应附加三个字段:用户名、组名、权限字
    在发生对这条记录进行任何操作时通过传递这三个值到自己定义函数来判断是否有相应的权限
    登陆的用户名和所在组通常保存在session中而无须传递
    一个长整型数可容纳32个标志位,足以满足需要了。这里需要注意到,组是可以分级的。如果某个权限是赋予大组的,那么在该大组的组成员都将得到该权限。这于win32系统的权限管理很相似或许你有可能去看一下wiki的处理方式,相信一定会有收获的。当然wiki的权限管理正好与你设想的相反。另外wiki的差异管理可方便的解决我们以前讨论的问题。
      

  12.   

    各有千秋,一般的论坛还是采用,一个表来存储权限,一条记录一个权限
    (PHP)动网论坛的就是用(1,2,3,4...) 这样的东东来表示权限。
      

  13.   

    权限分配:普通用户:阅读常规版块帖子&发贴
    认证用户:阅读认证版块帖子&发贴
     版  主 :对本版文件进行编辑删除&置顶等操作
     管理员 :管理所有版块的帖子
     站  长 :发布公告
     
      是否这样:若为认证用户,则在普通用户权限上增加认证版;若为版主,则在普通上增加本版管理权限;若为管理员,则在认证用户上增加全部版面管理权限;若为站长,则在管理员权限上增加公告权限。