php-人員許可權管理(RBAC)

来源:http://www.cnblogs.com/zhaohui123/archive/2017/05/23/6894870.html
-Advertisement-
Play Games

php-人員許可權管理(RBAC) 許可權管理可以想做vip的功能,普通用戶和vip用戶的功能是不一樣的,大致會用到五張表:用戶表、角色表、功能表,還有他們之間互相關聯的表:用戶與角色表、角色與功能表 我用到的五張表如下: 一.首先寫的是管理員頁面 1.用下拉列表顯示用戶名 2.因為上面已經造了新對象, ...


php-人員許可權管理(RBAC)

許可權管理可以想做vip的功能,普通用戶和vip用戶的功能是不一樣的,大致會用到五張表:用戶表、角色表、功能表,還有他們之間互相關聯的表:用戶與角色表、角色與功能表

我用到的五張表如下:

                 

            

一.首先寫的是管理員頁面

1.用下拉列表顯示用戶名

<div>
	<select id="user">
    <?php
	require"../DBDA.class.php";
	$db = new DBDA();
	$sql = "select * from users";
	$arr = $db->query($sql,1);
	foreach($arr as $v)
	{
		echo"<option value='{$v[0]}'>{$v[2]}</option>";
	}
	?>
    </select>
</div>

 

2.因為上面已經造了新對象,所以在顯示角色名時直接從SQL語句開始寫

<div>請選擇角色:
	<?php
	$sql = "select * from juese";
	$arr = $db->query($sql,1);
	foreach($arr as $v)
	{
		echo "<input type='checkbox' class='ck' value='{$v[0]}'/>{$v[1]}";
	}
	?>
</div>
<br/>

 

3.為了修改許可權加一個確認保存按鈕

<input type="button" value="保存" id="baocun" />

 

4.這樣,再考慮怎麼讓資料庫中用戶本有的角色顯示出來,那就是要用到下拉列表和覆選框的值了

可以把它寫入方法里,然後調用這個方法

function Xuan()
{
	var uid = $("#user").val();
	$.ajax({
			url:"chuli.php",
			data:{uid:uid},
			type:"POST",
			dataType:"TEXT",
			success: function(data){
					var js = data.trim().split("|");
					var ck = $(".ck");
					ck.prop("checked",false);
					for(var i=0;i<ck.length;i++)
					{
						var v = ck.eq(i).val();
						if(js.indexOf(v)>=0)
						{
							ck.eq(i).prop("checked",true);
						}
					}
				}
			
		})
}

 5.各項值的處理頁面

<?php
require"../DBDA.class.php";
$db = new DBDA();
$uid = $_POST["uid"];
$sql = "select jueseid from userinjuese where userid='{$uid}'";
echo $db->strquery($sql);

效果如下:

6.最後就是保存修改後的值了,可以直接用全部刪除在重新寫入的方法來進行值的選擇;對保存按鈕添加單擊事件

Xuan();

$("#user").change(function(){
		Xuan();
	})
$("#baocun").click(function(){
		var uid = $("#user").val();
		var str = "";
		var ck = $(".ck");
		for(var i=0;i<ck.length;i++)
		{
			if(ck.eq(i).prop("checked"))
			{
				str = str + ck.eq(i).val()+",";
			}
		}
	
	str = str.substr(0,str.length-1);
	
	$.ajax({
			url:"add.php",
			data:{uid:uid,js:str},
			type:"POST",
			dataType:"TEXT",
			success: function(data){
					alert("保存成功!");
				}
		})
	})

 7.保存的處理頁面

<?php
require "../DBDA.class.php";
$db = new DBDA();
$uid = $_POST["uid"];
$js = $_POST["js"];

//清空原有角色
$sql = "delete from userinjuese where userid='{$uid}'";
$db->query($sql);

//添加選中的角色
$ajs = explode(",",$js);

foreach($ajs as $v)
{
	$sql = "insert into userinjuese values('','{$uid}','{$v}')";
	$db->query($sql);
}

 效果如下:

 

下麵代碼用來copy用,註意AJAX需要引用Jquery

1.guanli.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
<script src="../jquery-3.2.0.min.js"></script>
</head>

<body>
<h1>用戶角色對應</h1>
<div>
	<select id="user">
    <?php
	require"../DBDA.class.php";
	$db = new DBDA();
	$sql = "select * from users";
	$arr = $db->query($sql,1);
	foreach($arr as $v)
	{
		echo"<option value='{$v[0]}'>{$v[2]}</option>";
	}
	?>
    </select>
</div>
<br/>
<div>請選擇角色:
	<?php
	$sql = "select * from juese";
	$arr = $db->query($sql,1);
	foreach($arr as $v)
	{
		echo "<input type='checkbox' class='ck' value='{$v[0]}'/>{$v[1]}";
	}
	?>
</div>
<br/>
<input type="button" value="保存" id="baocun" />

</body>
<script type="text/javascript">

Xuan();

$("#user").change(function(){
		Xuan();
	})
$("#baocun").click(function(){
		var uid = $("#user").val();
		var str = "";
		var ck = $(".ck");
		for(var i=0;i<ck.length;i++)
		{
			if(ck.eq(i).prop("checked"))
			{
				str = str + ck.eq(i).val()+",";
			}
		}
	
	str = str.substr(0,str.length-1);
	
	$.ajax({
			url:"add.php",
			data:{uid:uid,js:str},
			type:"POST",
			dataType:"TEXT",
			success: function(data){
					alert("保存成功!");
				}
		})
	})
	
function Xuan()
{
	var uid = $("#user").val();
	$.ajax({
			url:"chuli.php",
			data:{uid:uid},
			type:"POST",
			dataType:"TEXT",
			success: function(data){
					var js = data.trim().split("|");
					var ck = $(".ck");
					ck.prop("checked",false);
					for(var i=0;i<ck.length;i++)
					{
						var v = ck.eq(i).val();
						if(js.indexOf(v)>=0)
						{
							ck.eq(i).prop("checked",true);
						}
					}
				}
			
		})
}
</script>
</html>

 2.chuli.php

<?php
require"../DBDA.class.php";
$db = new DBDA();
$uid = $_POST["uid"];
$sql = "select jueseid from userinjuese where userid='{$uid}'";
echo $db->strquery($sql);

 3.保存的處理頁面 add.php

<?php
require "../DBDA.class.php";
$db = new DBDA();
$uid = $_POST["uid"];
$js = $_POST["js"];

//清空原有角色
$sql = "delete from userinjuese where userid='{$uid}'";
$db->query($sql);

//添加選中的角色
$ajs = explode(",",$js);

foreach($ajs as $v)
{
	$sql = "insert into userinjuese values('','{$uid}','{$v}')";
	$db->query($sql);
}

 

二.完成管理員頁面後,下麵就是登錄頁面

1.登錄基本頁面 login.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
<h1>登錄界面</h1>
<form action="dlchuli.php" method="post">
<div>用戶名:<input type="text" name="uid" /></div>
<div>密碼:   <input type="password" name="pwd" /></div>
<input type="submit" value="登錄" />
</form>
</body>
</html>

 2.登錄處理的頁面 dlchuli.php

<?php
session_start();


require "../DBDA.class.php";
$db = new DBDA();
$uid = $_POST["uid"];
$pwd = $_POST["pwd"];
$sql = "select pwd from users where uid='{$uid}'";
$mm = $db->strquery($sql);
if($mm==$pwd && !empty($pwd))
{
	$_SESSION["uid"] = $uid;
	header("location:main.php");
}
else
{
	echo"輸入的用戶名或密碼有誤!";
}

 

3.主頁面 main.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
<style type="text/css">
.list{ width:100px; 
	   height:35px; 
	   border:1px solid #36F; 
	   margin:0px 2px 0px 2px; 
           text-align:center; 
	   vertical-align:middle; 
	   line-height:35px;}
</style>
</head>

<body>
<h1>主頁面</h1>
<?php
session_start();
$uid ="";
if(empty($_SESSION["uid"]))//判斷session是否為空
{
	header("location:login.php");//空的話就返回登錄頁面
	exit;
}

$uid = $_SESSION["uid"];

require"../DBDA.class.php";
$db = new DBDA();
$sql = "select * from rules where code in(select distinct ruleid from juesewithrules where jueseid in(select jueseid from userinjuese where userid='{$uid}'))";

$arr = $db->query($sql,1);
foreach($arr as $v)
{
	echo "<div code='{$v[0]}' class='list'>{$v[1]}</div>";
}

?>
</body>
</html>

 選擇登陸張三顯示他的許可權,效果如下:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 輸入:以文件的形式,包括: 1.狀態機的輸入/輸出 2.狀態機中使用的變數 3.狀態機模型 應包括:Nodes、Transition、Condition等信 息 功能:1.根據狀態機格式化數據,完成狀態機函數的自 動生成。 2.(選做)可運用工具完成狀態機的圖形自動生成。註 意圖形工具的輸入格式。 ...
  •   當我們想研究不同sample的某個變數A之間的差異時,往往會因為其它一些變數B對該變數的固有影響,而影響不同sample變數A的比較,這個時候需要對sample變數A進行標準化之後才能進行比較。標準化的方法是對sample 的 A變數和B變數進行loess回歸,擬合變數A關於 ...
  • 題目鏈接 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M <= 10000, 1 <= N <= 1000000 ...
  • 這兩天在用python的bottle框架開發後臺管理系統,介面約定使用RESTful風格請求,前端使用jquery ajax與介面進行交互,使用POST與GET請求時都正常,而Request Method使用PUT或DELETE請求時,直接爆“HTTP Error 405: Method Not A ...
  • Django 自稱是“最適合開發有限期的完美WEB框架”。本文參考《Django web開髮指南》,快速搭建一個blog 出來,在中間涉及諸多知識點,這裡不會詳細說明,如果你是第一次接觸Django ,本文會讓你在感性上對Django有個認識,完成本文操作後會讓你有興趣閱讀的相關書籍和文檔。 本博客 ...
  • ★★ 輸入文件:dec.in 輸出文件:dec.out 簡單對比 時間限制:1 s 記憶體限制:128 MB Description 出題是一件痛苦的事情! 題目看多了也有審美疲勞,於是我捨棄了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,題目是這樣的:給出一串數以及一個數字C,要求計 ...
  • ★☆ 輸入文件:cjzd.in 輸出文件:cjzd.out 簡單對比 時間限制:1 s 記憶體限制:128 MB 問題描述 今年是國際數學聯盟確定的“2000——世界數學年”,又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的一個好朋友 ...
  • 問題描述 將整數n分成k份,且每份不能為空,任意兩種方案不能相同(不考慮順序)。 例如:n=7,k=3,下麵三種分法被認為是相同的。 1,1,5; 1,5,1; 5,1,1; 問有多少種不同的分法。 輸入:n,k (7≤n≤200,2≤k≤6) 輸出:一個整數,即不同的分法。 樣例 輸入: 7 3 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...