権限管理について話す前に、まず権限管理がどのような機能を持っているかを知っておく必要があります:
(1) ユーザーは指定されたコントローラーと指定されたメソッドにのみアクセスできます
(2) ユーザーは複数のユーザーで存在できます。 groups
by T.
RBAC RBAC RBAC) -Based Access Control (ロールベースのアクセス制御) とは、ユーザーがロールを通じて権限に関連付けられることを意味します。簡単に言うと、ユーザーには複数の役割があり、各役割には複数の権限があります。このようにして、「ユーザー-ロール-権限」認可モデルが構築されます。このモデルでは、通常、ユーザーとロールの間、およびロールと権限の間に多対多の関係が存在します。
1. データベース設計
最初にユーザーテーブル、ロールテーブル、関数テーブルの 5 つのテーブルを作成します。 接続表 Table..次に、ロールメニューとユーザーロールテーブルです:
2. 管理者の管理ページ、
<?php include ("../db.class.php"); $db = new db(); $sql = "select * from qxyh"; $arr = $db->Query($sql); foreach ($arr as $v) { echo "<option value='{$v[0]}'>{$v[2]}</option>"; } ?>
(3)。ユーザーのロールを変更する場合は、まずユーザーの対応するロールテーブルとそのすべての情報を削除します。 userを入力し、取得したユーザー名とロールコードを新たに追加します。
ドロップダウンリストを使用する: phpクエリを埋め込んでトラバースし、ドロップダウンリストとして表示します
ロールを選択し、複数選択ボックスを使用します:
<p style="margin-bottom: 7px;"><p>请选择角色<br/><?php<br/>$sjs = "select * from qxzw";<br/>$ajs = $db->Query($sjs);<br/>foreach ($ajs as $v){ <br/> echo "<input type='checkbox' value='{$v[0]}' class='ck'/>{$v[1]} ";<br/>}?><br/></p><br/><input type="button" value="确定" id="btn"/><br/></p>
写真:
ユーザーが変更されると、それに応じて対応するロールも変更され、その人のロール情報が変更されて追加および保存されます。追加および保存の基本的な考え方は、最初にすべてのロールを削除することです。データベース内の人物に対応する情報を取得し、選択した部分をデータベースに追加します。
まず、デフォルトのロールを選択させます:
<script> //选中默认角色 function xuan() { var uid = $("#user").val(); $.ajax({ url:"chuli.php", data:{uid:uid,type:0}, type:"POST", dataType:"TEXT", success:function(data) { var juese = data.trim().split("|"); //拆分完全都变成代号 var ck = $(".ck"); ck.prop("checked",false); for(var i=0;i<ck.length;i++) { //便利所有的列表 if(juese.indexOf(ck.eq(i).val())>=0) { ck.eq(i).prop("checked",true); } } } }); } </script>
<?php include ("../db.class.php"); $db = new db(); $type = $_POST["type"]; switch ($type) { case 0: $uid = $_POST["uid"]; $sql = "select jid from qxyhzw WHERE uid='{$uid}'"; echo $db->strQuery($sql); break; }
ログインが成功した場合、最終結果を見てみましょう。ログインに失敗すると、エラー
もう一度保存ボタンを押してください:
処理中のページ:
りー効果を確認します:
キャラクターはデフォルトで選択されています
変更後に保存することを選択します:
管理ページの合計コード:
<script>//当用户变化的时候去选中相应角色
$("#user").change(function(){
xuan();
}) //点击确定保存角色信息
$("#btn").click(function(){ var uid = $("#user").val(); //找到用户名
var juese = "";// 找到角色代号
var ck = $(".ck"); //找到所有的checked
for(var i=0;i<ck.length;i++)
{// 遍历他
if(ck.eq(i).prop("checked"))
{// 如果他选中了,两个参数是改他的状态
//娶过来值;加个|分割一下
juese += ck.eq(i).val()+"|";
}
}
juese = juese.substr(0,juese.length-1);// 去掉最后的| $.ajax({
url:"chuli.php",
data:{uid:uid,juese:juese,type:1},
type:"POST",
dataType:"TEXT",
success:function(data){
alert("修改成功");
}
});
})
});</script>
<?php
include ("../db.class.php");
$db = new db();
$type = $_POST["type"];
switch ($type)
{
case 1:
$uid = $_POST["uid"];
$juese = $_POST["juese"];
// 首先全部删掉里面的职位
$sdel = "delete from qxyhzw WHERE uid = '{$uid}'";
$db->Query($sdel,0);
//拆分取到的字符串
$arr= explode("|",$juese);
foreach ($arr as $v)
{
$sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";
$db->query($sql,0);
}
echo "ok";
break;
}
3. ログインページ:
表示は非常にシンプルです:
ログイン処理を書く<?php
include ("../db.class.php");
$db = new db();
$type = $_POST["type"];
switch ($type)
{
case 0:
$uid = $_POST["zhang"];
$sql = "select jid from qxyhzw WHERE uid='{$uid}'";
echo $db->strQuery($sql);
break;
case 1:
$uid = $_POST["zhang"];
$juese = $_POST["juese"];
// 首先全部删掉里面的职位
$sdel = "delete from qxyhzw WHERE uid = '{$uid}'";
$db->Query($sdel,0);
//拆分取到的字符串
$arr= explode("|",$juese);
foreach ($arr as $v)
{
$sql = "insert into qxyhzw VALUES ('','{$uid}','{$v}')";
$db->query($sql,0);
}
echo "ok";
break;
}
ホームページは人それぞれ違います
<body><h1>主页面</h1>
<?php
session_start();
include ("../db.class.php");
$db = new db();$zhang = "";
if(empty($_SESSION["zhang"]))
{
header("location:qx_dr.php"); exit;
}//登入者用户名
$zhang = $_SESSION["zhang"];//根据用户名查角色$sql = "select jid from qxyhzw WHERE uid = '{$zhang}'";$aql = $db->Query($sql);//根据角色代号查功能代号$attr = array();//定义一个存放功能代号的数组foreach ($aql as $v)
{ $jsid = $v[0];// 角色代号
$ssql = "select rid from qxgnzw WHERE jid='{$jsid}'"; $aaql = $db->strQuery($ssql);//拆分
$adai = explode("|",$aaql); foreach ($adai as $h)
{ array_push($attr,$h);
}
}$attr = array_unique($attr);//去重
//显示foreach ($attr as $k)
{ $ql = "select * from qxgn WHERE code = '{$k}'";
$arr = $db->Query($ql); arr[0][0]; $arr[0][1]; echo "<p code='{$arr[0][0]}'>{$arr[0][1]}</p>";
}?>
</body>
用php的用户体验不好,最好还是得用ajax
以上がphp人事権限管理(RBAC)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。