>백엔드 개발 >PHP 튜토리얼 >PHP 권한 관리 기능 구현 방법

PHP 권한 관리 기능 구현 방법

巴扎黑
巴扎黑원래의
2017-09-26 09:48:332615검색

아래 편집기는 PHP에서 권한 관리 기능을 구현하는 방법의 예를 제공합니다. 편집자님이 꽤 좋다고 생각하셔서 지금 공유하고 모두에게 참고용으로 드리도록 하겠습니다. 편집자를 따라가서 살펴보겠습니다

권한 관리 시스템은 주로 사용자마다 다른 권한을 설정하는 데 사용되므로, 권한이 다른 사용자는 로그인 후 다른 기능을 사용할 수 있습니다.

먼저 데이터베이스를 살펴보겠습니다

총 5개의 테이블이 있습니다. 사용자, 역할 및 역할 작업은 나머지 2개와 "w" 유형의 관계를 형성합니다. 권한 데이터베이스 방법은 먼저 권한을 설정합니다. 즉, 관리는 사용자마다 다른 권한을 설정합니다.

1. 관리자 페이지 RBAC.php


<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>权限管理</title>
    <script src="bootstrap/js/jquery-1.11.2.min.js"></script>    
  </head>
  <body>  
    <h2>用户与角色管理</h2>
    <p>
      请选择用户:
    <select id="user">
      <?php
      require_once "./DBDA.class.php";
      $db = new DBDA();
      $sql = "select * from users";
      $arr = $db->query($sql,0);
      foreach($arr as $v){
        echo "<option value=&#39;{$v[0]}&#39;>{$v[2]}</option>";
      }
      ?>
    </select>
    </p>  
    <br />
    <p>
      请选择角色:
      <?php
      $sql = "select * from roles";
      $arr = $db->query($sql,0);
      foreach($arr as $v){
        echo "<input type=&#39;checkbox&#39; class=&#39;ck&#39; value=&#39;{$v[0]}&#39;>{$v[1]}";
      }
      ?>
    </p>
    <br />
    <input type="button" value="确认" id="btn"/>
  </body>
  <script>
    sel(); //选中默认角色
    $("#user").change(function(){
       //当用户选中变化的时候,去选中相应角色
      sel();
    })
      //点击确定保存角色信息
    $("#btn").click(function(){
      var uid = $("#user").val();
      var ck = $(".ck");
      var role = "";//初始为空
      for(i=0;i<ck.length;i++){
        var v = ck.eq(i).val();
        if(ck.eq(i).prop("checked")){
          role += ck.eq(i).val()+"|";
        }
      }
      $.ajax({
        type:"POST",
        url:"RBbtnchuli.php",
        data:{uid:uid,role:role},
        dataType:"TEXT",
        success:function(data){
          alert("修改成功!");
        }
      });
    })
      //选中默认角色的封装方法
    function sel(){
      var uid = $("#user").val();
      $.ajax({        
        url:"RBchuli.php",
        data:{uid:uid},
        type:"POST", 
        dataType:"TEXT",
        success:function(data){
          var role = data.split("|");
          var ck = $(".ck");
          ck.prop("checked",false);
          for(i=0;i<ck.length;i++){
            var v = ck.eq(i).val(); 
            if(role.indexOf(v)>=0){
              ck.eq(i).prop("checked",true);
            }
          } 
        }
      });
    }
    
  </script>
</html>

2. 관리자 처리 페이지 RBchuli.php


<?php
$uid = $_POST["uid"];
require_once "./DBDA.class.php";
$db = new DBDA();
$sql = "select rolesuid from users_roles where usersuid=&#39;{$uid}&#39;";
echo $db->StrQuery($sql,0); 保存角色信息的处理页面RBbtnchuli.php

저장 정보 처리 페이지 RBbtnchuli. php


<?php 
$uid = $_POST["uid"]; 
$role = $_POST["role"];//字符串 
$role = substr($role,0,strlen($role)-1); 
$arr = explode("|", $role); 
require_once "./DBDA.class.php"; 
$db = new DBDA(); 
//删除 
$sdel = "delete from users_roles where usersuid=&#39;{$uid}&#39;"; 
$db->query($sdel); 
//添加 
foreach($arr as $v){ 
  $sql = "insert into users_roles values(0,&#39;{$uid}&#39;,&#39;{$v}&#39;)"; 
  $db->query($sql); 
}

효과는 그림과 같습니다:

다음으로 할 일은 계정에 로그인하여 기능을 보는 것입니다

3. 사용자 로그인 페이지 RBlogin.php.


<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <script src="bootstrap/js/jquery-1.11.2.min.js"></script>
    <script src="bootstrap/js/bootstrap.min.js"></script>
    <link href="bootstrap/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet" type="text/css"/>
  </head>
  <style>
    .title{
      margin-left: 600px;
      margin-top: 150px;
    }
    .quanju{
      margin-left: 450px;
      margin-top: -180px;
    }
    .name,.pwd{
      max-width: 120px;
    }
    .yangshi1{
      margin-top: 200px;
    }
  </style>
  <body>    
<form class="form-horizontal" role="form" action="RBloginchuli.php" method="post">
  <h3 class="title">用户登录</h3>
  <p class="quanju">
      <p class="form-group yangshi1">
        <label for="firstname" class="col-sm-2 control-label">用户名:</label>
        <p class="col-sm-10">
          <input type="text" class="form-control name" name="uid" placeholder="请输入用户名">
        </p>
      </p>
      <p class="form-group yangshi2">
        <label for="lastname" class="col-sm-2 control-label">密码:</label>
        <p class="col-sm-10">
          <input type="text" class="form-control pwd" name="pwd" placeholder="请输入密码">
        </p>
      </p>
      <p class="form-group">
        <p class="col-sm-offset-2 col-sm-10">
          <p class="checkbox">
            <label>
            <input type="checkbox">
            保存密码 </label>
            <label>
            <input type="checkbox">
            下次自动登录 </label>
          </p>
        </p>
      </p>
      <p class="form-group">
        <p class="col-sm-offset-2 col-sm-10">
          <button type="submit" class="btn btn-warning" value="登录" onclick="return login()" >
          登录
          </button>
          
        </p>
      </p>
    </p>  
  </form>    
  </body>
</html>

4. 로그인 페이지 처리 페이지 RBloginchuli.php


<?php
session_start();
$uid = $_POST["uid"];
$pwd = $_POST["pwd"];
require_once "./DBDA.class.php";
$db = new DBDA();
$sql = "select pwd from users where uid=&#39;{$uid}&#39;";
$mm = $db->StrQuery($sql,0);
if(!empty($pwd) && $pwd==$mm){
  $_SESSION["uid"] = $uid;
  header("location:RBmain.php");
}else{
  echo "<script>alert(&#39;用户名或密码有误!&#39;)</script>";
}

5. 마지막으로 사용자의 메인 페이지를 RBmain.php


만듭니다.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>权限主页面</title>    
  </head>
  <body>
    <?php
    session_start();
    if(empty($_SESSION["uid"])){
      header("location:RBlogin.php");
      exit;
    }
    $uid = $_SESSION["uid"];
    
    require_once "./DBDA.class.php";
    $db = new DBDA();
    //子查询
    $sql = "select * from roleswork where code in (select * from roles_roleswork where rolesuid in (select * from users_roles where usersuid=&#39;{$uid}&#39;))";
    $arr = $db->query($sql,0);
    foreach($arr as $v){
      echo "<p class=&#39;menu&#39;>{$v[1]}</p>";
    }    
    ?>
        
  </body>
</html>

효과는 그림과 같이:

위 내용은 PHP 권한 관리 기능 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.