Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php在导航菜单中设置文件权限_Php_Mysql_Privileges - Fatal编程技术网

使用php在导航菜单中设置文件权限

使用php在导航菜单中设置文件权限,php,mysql,privileges,Php,Mysql,Privileges,您好,提前谢谢您的帮助。我有一个更强大的版本,我正在努力,但我需要一些短期的东西。我们创建了对管理面板的两层用户访问权限。员工和管理员。下面的代码是我们在短期内实现的较长版本的一个简短版本示例。首先,我想检查他们的访问级别是级别1还是级别0。这是OOP中的一个方法 function menuPriviledge($dbCon){ $username = $_REQUEST['username']; if($accessLevel = $this->

您好,提前谢谢您的帮助。我有一个更强大的版本,我正在努力,但我需要一些短期的东西。我们创建了对管理面板的两层用户访问权限。员工和管理员。下面的代码是我们在短期内实现的较长版本的一个简短版本示例。首先,我想检查他们的访问级别是级别1还是级别0。这是OOP中的一个方法

    function menuPriviledge($dbCon){

        $username = $_REQUEST['username'];

        if($accessLevel = $this->dbConnection->query("SELECT access FROM UserProfiles WHERE username = '$username' LIMIT 0, 1")){
            while($accessData = $accessLevel->fetch_assoc()){
                $access = $accessData['access'];
            }
        }
在我回音完上面的部分后,我得到了正确的答案,我得到了与帐户中当前用户名相关联的访问级别1。这就是我一直在寻找的,所以我们很好,但是在下一个if语句中,我测试变量$access=to 1(下面的语句),如果它等于1,我调用printf并显示为管理员准备的导航菜单的当前列表,否则会为页面访问受限的员工显示不同的预设菜单

            if(isset($access)){

                switch($access){

                case 1: 
                    $query = "SELECT * FROM CVCUserFilePrivileges";
                    if($files = $this->dbConnection->query($query)){
                        while($access = $files->fetch_assoc()){
                            printf("<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Directory Listings</a></li>
                                <li><a title=\"Ads Manager\"><i class=\"icon-laptop\"></i>Ads Manager<span>5</span></a>
                                    <ul>
                                        <li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Dealer Paid Listings</a></li>
                                        <li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Listing Side Ads</a></li>
                                        <li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Scrap Metal Page Ads</a></li>
                                        <li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Coin Request Page Ads</a></li>
                                        <li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Dealer Form Page Ads</a></li>
                                    </ul>                   
                                </li>", $access['directoryList'], $access['dlrPaidListing'], $access['listingSideAds'], $access['scrapMetalAds'], $access['coinRequestAds'], $access['dlrFormAds']);
                        }
                    }
                break;
                case 0:
                    $query = "SELECT * FROM CVCUserFilePrivileges";
                    if($files = $this->dbConnection->query($query)){
                        while($access = $files->fetch_assoc()){
                            printf("<li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Directory Listings</a></li>
                                <li><a title=\"Ads Manager\"><i class=\"icon-laptop\"></i>Ads Manager<span>1</span></a>
                                    <ul>
                                        <li><a href=\"%s\"><i class=\"icon-angle-right\"></i>Dealer Paid Listings</a></li>
                                    </ul>                   
                                </li>", $access['directory'], $access['dlrPaidListing']);
                        }
                    }
                break;
                default:
                    echo "There is an error, no access level set, contact your database administrator";
                }
            }
if(isset($access)){
交换机($access){
案例1:
$query=“从CVCUserFilePrivileges中选择*”;
如果($files=$this->dbConnection->query($query)){
而($access=$files->fetch_assoc()){
printf(“
  • “,$access['directoryList'],$access['dlrPaidListing'],$access['listingSideAds'],$access['scrapMetalAds'],$access['coinRequestAds'],$access['DlRformas']); } } 打破 案例0: $query=“从CVCUserFilePrivileges中选择*”; 如果($files=$this->dbConnection->query($query)){ 而($access=$files->fetch_assoc()){ printf(“
  • “,$access['directory'],$access['dlrPaidListing']); } } 打破 违约: echo“出现错误,未设置访问级别,请与数据库管理员联系”; } }
    当它半工作时,它继续将第一页链接添加到它下面的每个导航选项,因此每个导航选项都指向同一页。当它不工作时,它就完全消失了,导航甚至不存在。我希望我能充分解释这一点。问题似乎出在if语句上,在显示导航菜单之前,我测试了它们的访问级别。

    将代码更改为:

    if(isset($access)) {
    
        switch($access) {
    
            case 1:
               // do the code
               break;
    
            case 2:
               // do the code
               break;
    
        }
    }else{
        echo "access not set";
    }
    
    试试这个


    注:1它与“1”不同。您是否将sql字段设置为int?

    为了在保护页面的同时充分发挥作用,我添加了此简单代码来存储登录过程中登录的当前用户名

            session_start();
                $_SESSION['username'] = $user;
    
    然后我添加了一个包含以下语法的include文件

    session_start();
    if(isset($_SESSION['username'])){
        $userId = $_SESSION['username'];
    } else {
        echo "You don't have credentials to enter...";
        exit();
        die();
    }
    
    这个include被添加到所有文件中,或者我还可以选择将所有页面中的公共include文件包含到包含所有公共include()的include文件中;文件夹。现在它限制访问,除非有人登录,但如果有人有更好的方法优化此代码,请告诉我。我觉得这个版本很简单,很轻。任何人可以推荐的任何其他安全级别,请随时告诉我。其他人也可以用这个

    现在,根据存储在
    $userId
    中的用户名,它将提供正确的菜单

    菜单的语法如下所示

    class menu{
    
        public function __construct($dbCon){
            $this->dbConn = $dbCon;
        }
    
        function menuPriviledges($dbCon){
    
            global $userId;
    
                if($accessLev = $this->dbConn->query("SELECT access FROM UserProfiles WHERE userId = '$userId'")){
                    while($Data = $accessLev->fetch_assoc()){
                        $access = $Data['access'];
                    }
                }
    
                if($access == 1){
                    include('common-menu-admin.php');
                } elseif($access == 0) {
                    include('common-menu-employee.php');
                }
    
        }
    }
    

    现在一切都好了,速度也快了

    嗨,新兵们。。。第一:为了获得良好的实践,您必须在
    if
    语句之前启动
    $access
    变量。第二:如果您的用户只有两种访问类型,则不需要使用
    else If
    。仅
    其他
    标记。第三:您的SQL查询在管理员和员工两种情况下都是相同的。谢谢@Thiagaougustusoliveira,我将在没有elseif的情况下使用它。SQL查询是相同的,因为每个访问级别可用的文件数量已经预先确定并硬编码到php中。上面我只显示了1
  • 标签,但在实际版本中,它们在导航中的页数不同。这会为我赢得时间。你有什么进展吗?没有,我还在努力解决@Thiagaougustusoliveira希望今天就完成这项工作。@Thiagaougustusoliveira我将语句更改为switch语句,但它目前不起作用。我试过了,但我还是得到了一份空白菜单。它只是没有出现。我更改了数据库,使access列为INT,并使用了1而不是“1”。除switch语句外,其他所有操作都正常。有没有办法把它贴在这里,这样你就可以看到更新了?谢谢你们两位的帮助。让我们试着调试一下。注释switch语句并放入
    echo$access请查看输出并告诉我。我之前做过,它给了我一个1,这是正确的。我只是仔细检查了一下。早些时候,我还拿走了printf(“”);转换为和echo,并将末尾的数据更改为菜单内部,以查看该操作是否有效,但仍然收到空响应。没有出现菜单。我注意到,当我取出while语句时,它会显示出来,但列表中只有第一个链接附加到每个导航选项卡,因此您只能转到一页。哦,很高兴能提供帮助!是的,通过这种语法,它变得更容易阅读和运行。荣誉