我想做个论坛
但是还有好多问题不懂,不敢轻易动手做
比如好多论坛都有版主
每个版主都只能修改自己管理的版块的内容,而不能修改其他版块
这个权限系统是怎么做出来的啊?原理是怎么样的?
哪位达人给讲讲啊?
散分~~~

解决方案 »

  1.   

    搜索 Rbachttp://www.google.com/search?q=php+rbac&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:zh-CN:official&client=firefox-a
      

  2.   

    先判断该用户的权限,是普通用户,还是管理员,还是版主。如果是版主再判断其所管理的版块,再根据文章所在的版块去判断。听起不不复杂,要想做得较好还是参考一下成熟的论坛是怎么做的吧。比如:www.phpbb.com  (感觉很复杂,不建议参考)
    www.discuz.net
    www.phpwind.com等等。
      

  3.   

    原理 就是每个 人 对应自己的权限user 表userid user  admin  
    1      cww     Y
    2      add     Npermissions 表id userid       per
    1    1         1,2,3,4,5 ...,10   // 分别对应 栏目 id 为 1 到 10 的栏目
    2    2         2,3                // 只对 2,3 有权限  再建个栏目表, 我只说个简单的,供 LZ 参考   
      

  4.   

    phpBoy005的方案貌似可行。
    还有更好的解决方案吗?
    详细点最好啊
    本人没做过网站,这是第一个~~所以很菜的说~~
      

  5.   

    随便一个不太大的程序如果注释的不好都够我研究两天的了
    来这问就是为了迅速点么~~
    我大概了解了下
    一般都是分组,然后创建权限表,用户登录时取出权限值写入session。
    然后在需要判断用户权限的页面中判断session的值。这样对不啦?
      

  6.   

    通用点的就是phpgacl了,你可以研究研究
    http://phpgacl.sourceforge.net/
      

  7.   

    之所以重复开发,一是为了能够对程序有更深入的了解,二是自己开发的东西自己用着熟练,三是自己开发的能够准确满足自己的要求,其他的一些存在的系统是面向绝大多数用户的,用的人多了,研究的多了,就会有漏洞,虽然所有的程序都存在漏洞,但是没被人发现就不叫漏洞。
    最重要的就是为了锻炼自己的能力,系统都是人开发出来的,如果光用别人的,自己不动手,什么时候才能参与到系统开发中呢?
    谢谢楼上各位的指点,我研究了研究,大概写了一个用户登录类,能够判断用户权限并且保存进session。
    发来给大家看下,看看有什么可以改进的地方吗?
    <?php
    include 'mcrypt.inc.php';  //MCRYPT加密类文件,由数据库连接类继承而来
    session_start(); 
    class Log extends Mcrypt  
    {
    public $name;   //保存用户名
    public $link;   //保存数据库连接句柄
    private $row;   //查询结果

    function __construct()
    {
    $this->link=conn::connect(); //连接数据库
    }

    function userLog($name='',$pass='')   //主要函数,用来实现用户登录
    {
          $conn=$this->link;  //将数据库连接句柄赋给局部变量,提高效率
          $sql="SELECT * FROM t_userdata WHERE u_name='$name'";   //开始查询数据库
          $r=$conn->query($sql);  
          $r->setFetchMode(PDO::FETCH_ASSOC);
          $row=$r->fetch();
          if(empty($row))  //如果没有结果说明用户名输入错误
          {
          $message='用户名错误';  
          }     
          else if($row['u_pass']!=$pass)  //如果密码错误
           {
            $message='密码错误';
           }
              else 
              {        
            $this->name=$name;  //将用户名返回
            $this->row=$row;   //将数据库结果集返回
            $this->checkPower();  //检查权限
            $this->setCookie();  //设置cookie
            $message='欢迎您:'.$row['u_name'];
           }
           echo $message;
         
         }
         
         function checkPower()  //检查权限函数
         {     
              $conn=$this->link; //将数据库句柄赋值给局部变量
              $sql1="SELECT t_group.g_categoryid as category,t_power.*
                     FROM t_group 
                     inner join t_power on t_group.g_groupid=t_power.p_groupid 
                     WHERE t_group.g_username='$this->name'";  //联合查询数据库,取出权限权值和所属板块ID
              $r=$conn->query($sql1);
              $row=$r->fetch();
              $p=0;
              foreach ($row as $key=>$value)  //将权值进行或运算后存入 session 以便以后进行与运算判断
              {
               switch ($key)
               {
               case 'category' : $_SESSION['power']['category']=$row['category'];break;//用户所属版块
               case 'p_groupid' : break;  //p_groupid 用户所属组ID,用来联合查询,不用处理
               default: $p=$p|$value;  //将权值或运算
               }
              }
              $_SESSION['power']['power']=$p; //将权值存入session
         }            

         function setCookie()  //设置cookie
         {
          $rows=$this->row;  //将数据库查询结果集赋值给局部变量
          setcookie('yh_user',$this->en_code($rows['u_name'],3600));
          setcookie('yh_username',$this->en_code($rows['u_level']),3600);
          setcookie('yh_useroicq',$this->en_code($rows['u_oicq']),3600);
          setcookie('yh_userdate',$this->en_code($rows['u_date']),3600);
          setcookie('yh_userdate',$this->en_code($rows['u_id']),3600);
         }
    }
    ?>
    这种方法只能保存八种权限,因为二进制只能保存到256
      

  8.   

    补充一下,还是别用Mcrypt了,还有点问题,这东西正在开发中
    老实点base64_encode吧~~
      

  9.   

    终于搞懂了权限系统怎么运作的了
    唉,人笨了干什么都慢
    先简单设计一个小系统用着吧
    以后再扩展
     一,人     表   
      id       姓名             组id   
      1         张三               1   
      2         李四               2   
        
      二,   组     表   
        
      id           组名                         
      1             党支部                     
      2             团支部                       
      3             小脚侦察队             
      4             特权组   
      三,权限表   
      id         权限名   
      1             扫地   
      2             看报纸   
      3             看毛片   
      4             罚款   
      四,组权对应表   
      id     组id     权id   
      1       1           1   
      2       1           2   
      3       2           2   
      4       2           3   
      5       3           3   
      6       3           4   
      7       4           1   
      8       4           2   
      9       4           3   
      10     4           4   我参考的这个家伙的设计,感觉还不错,就是缺少角色控制,不过暂时还用不到,在权限表后面加了个权重值列,以便运用时能用简单的与运算判断权限。
    咳,可算完成了~~结贴~~~来者有分~