<?php//---------权限检查函数:检查用户是否有权限访问当前页面
//---------perval,当前页面所属的权限值:参见数据字典
//---------rank,访问当前页面所需要的权限等级,如无权限 0,查看 1,修改+查看 2 
function checkPermit(perval,rank)
{
if($_SESSION["P"][perval-1]>=rank)
return true;
else
return false;
}function echoNoPermit()
{
echo "<br><br><p align='center'>用户无权限访问此页。请返回<br><a href='javascript:history.back()'>返回</a></p>";
}?>以上是判断权限的函数,一下是checklogn部分代码:<?php 
session_start();
include "../conn/conn.php";
$user=$_POST['user'];
$pwd=$_POST['pass'];
$sql=mysql_query("select * from tbl_admin where adSN='".$user."' and adPass='".$pwd."'");
if($sql){
$_SESSION[name]=$user;

$sql=mysql_query("select rolPermitVal1,rolPermitVal2,rolPermitVal3,rolPermitVal4,rolPermitVal5,rolPermitVal6,rolPermitVal7,rolPermitVal8,rolPermitVal9,rolPermitVal10,rolPermitVal11,rolPermitVal12,rolPermitVal13,rolPermitVal14,rolPermitVal15,rolPermitVal16,rolPermitVal17 from tbl_indi_permit1 where ptSN='".$_SESSION[name]."' and ptSort=0");
  $permit=mysql_fetch_array($sql);
  $_SESSION["P"][0]=$permit['rolPermitVal1'];//这里我有个疑问,这里的session[""][0]=$permit['*'];是什么意思....
  $_SESSION["P"][1]=$permit['rolPermitVal2'];
  $_SESSION["P"][2]=$permit['rolPermitVal3'];
  $_SESSION["P"][3]=$permit['rolPermitVal4'];
  $_SESSION["P"][4]=$permit['rolPermitVal5'];
  $_SESSION["P"][5]=$permit['rolPermitVal6'];
  $_SESSION["P"][6]=$permit['rolPermitVal7'];
  $_SESSION["P"][7]=$permit['rolPermitVal8'];
  $_SESSION["P"][8]=$permit['rolPermitVal9'];
  $_SESSION["P"][9]=$permit['rolPermitVal10'];
  $_SESSION["P"][10]=$permit['rolPermitVal11'];
  $_SESSION["P"][11]=$permit['rolPermitVal12'];
  $_SESSION["P"][12]=$permit['rolPermitVal13'];
  $_SESSION["P"][13]=$permit['rolPermitVal14'];
  $_SESSION["P"][14]=$permit['rolPermitVal15'];
  $_SESSION["P"][16]=$permit['rolPermitVal16'];
  $_SESSION["P"][17]=$permit['rolPermitVal17'];
  
echo"<script>alert('登录成功');window.location.href='admin.php';</script>";
}
else{
echo"<script>alert('账号或密码错误');window.location.href='login.php';</script>";
}
?>

解决方案 »

  1.   

    function checkPermit(perval,rank)
    {
        if($_SESSION["P"][perval-1]>=rank)
    少了美元吧
      

  2.   

    同上,变量前面的$符号function checkPermit($perval,$rank)
    {
        if($_SESSION["P"][$perval-1]>=$rank)
            return true;
        else
            return false;
    }
      

  3.   

    函数知道怎么回事了,原来是忘了“$符号了”
    更改如下:
    function checkPermit($perval,$rank)
    {
    if($_SESSION["P"][$perval-1]>=rank)
    return true;
    else
    return false;
    }function echoNoPermit()
    {
    echo "<br><br><p align='center'>用户无权限访问此页。请返回<br><a href='javascript:history.back()'>返回</a></p>";
    }
      

  4.   

     $_SESSION["P"][0]=$permit['rolPermitVal1'];//这里我有个疑问,这里的session[""][0]=$permit['*'];是什么意思
      

  5.   

    checkPermit(perval,rank)
    简单的理解。
    $_SESSION['P'] 为全局的 权限  数组!
    $_SESSION['P'][0]例如 为 可以 查看 内裤的权限
    系统已经 设定 如果 $_SESSION['P'][0] < 设定值 既 $rank
    checkPermit( 全局权限的存储变量,$rank(例如会员有 9个等级 0 - 9 ))已经清楚明白了吧?
    就是说 你的当前会员 查看内裤权限 如果 低于 设定值 的话 就不可以看别人内裤了
    $_SESSION['P'][0] = 3级的 内裤 会员 不能 查看 $rank 预设定为4级 的内裤等级
      

  6.   

    代码表达//当前用户的权限
      $_SESSION["P"][查看内裤]=4级;
      $_SESSION["P"][查看三围]=0级;
      $_SESSION["P"][去厕所]=5级;
      $_SESSION["P"][吃饭]=6级;
      $_SESSION["P"][走路]=1级;
    内裤查看页面 selXXX.phpif(checkPermit(查看内裤,5级才可以看))
    { echo YEAH,我看到很多小裤裤 }else{ echo 切!我不稀罕看小裤裤 }
      

  7.   

    非常感谢楼上的朋友,能这么详细的讲解,假如说我这里有个 用户为“001”吧我是希望让他只能看一个模块比方说是“供应商资料”这个模块,现在001用户登录了系统它要去点击“供应商资料”这个模块,而我也在“供应商资料”这个模块的最前面写了如下代码来判断:
    include("../function/function.php");//这里就是调用的最上面列出来的那个函数
    if(checkPermit(1,1)==false); //供应商查看权限
    {
    echoNoPermit();
    exit();
    }
    我在这里做了一个判断,if(checkPermit(1,1)==false),而里面的参数值“1“,”1“是固定的,而且和用户”001“没联系,我是想让”001“一登录,系统就知道他有什么权限可以看哪些模块了,为了表达的更详细点,我把这连个数据表列出来
      

  8.   

    首先 你必须登录这个这个人!才能得到这个人相对的权限<?php 
    session_start();
    include "../conn/conn.php";
    $user=$_POST['user'];
    $pwd=$_POST['pass'];
    $sql=mysql_query("select * from tbl_admin where adSN='".$user."' and adPass='".$pwd."'");
    if($sql){
        $_SESSION[name]=$user;
        //查询出这个管理员的权限( 储存于 tbl_indi_permit1 )
        $sql=mysql_query("select rolPermitVal1,rolPermitVal2,rolPermitVal3,rolPermitVal4,rolPermitVal5,rolPermitVal6,rolPermitVal7,rolPermitVal8,rolPermitVal9,rolPermitVal10,rolPermitVal11,rolPermitVal12,rolPermitVal13,rolPermitVal14,rolPermitVal15,rolPermitVal16,rolPermitVal17 from tbl_indi_permit1 where ptSN='".$_SESSION[name]."' and ptSort=0");
      //赋值,
      $permit=mysql_fetch_array($sql);
      $_SESSION["P"][0]=$permit['rolPermitVal1'];
      $_SESSION["P"][1]=$permit['rolPermitVal2'];你可以设置的权限 
    就是表中 rolPermitVal1 - rolPermitVal17 而1 - 17 分别是什么权限。那我就不知道了
    例如 rolPermitVal1 就是 那个查看 "供应商资料"这个模块 的权限
    好了 我 把
    //注意表中 rolPermitVal1 字段的值 设置为 9
    $_SESSION["P"][0]=$permit['rolPermitVal1'];//$_SESSION["P"][0]= 9;//去到 供应商资料模块 页面if(checkPermit(1,8)==false); //供应商查看权限
    {    
    echoNoPermit();
        exit();
    }
    我们先看 checkPermit(1,8) 函数体
    function checkPermit(1,8)//之前我们设定的权限 $_SESSION["P"][0]= 9;
    {
        //函数体内原代码if($_SESSION["P"][perval-1]>=rank)
        //现在判断 $_SESSION["P"][0] >= 8;
        if($_SESSION["P"][1-1]>=8)
        //好!我们很明显 大于 8 返回 TRUE 可以查看
            return true;
        else
            return false;
    }
    //想让”001“一登录,系统就知道他有什么权限可以看哪些模块了
    //很明显 权限表 tbl_indi_permit1 是固定字段的 , 那你可以使用语言包实现
    //新建语言包 $Pname[0-17] = 权限名称, $Prank[0-17] = 可使用权限,
    foreach ($_SESSION["P"] as $key => $var) 
    {
       if($var>=$Prank[$key])
       echo $P[$key];
    }
    那他可以使用什么权限就一目了然了。 而上边向 checkPermit 传值进 rank 也可以使用$Prank[] 替换掉