php許可權分配
⑴ php許可權管理如何實現
我得做法是,用形如:
修改文章,1,刪除文章,1,新增文章,1
這樣的字元串來保存許可權值
讀取後explode為數組,需要校驗許可權的時候,用
if($array["修改文章"])
判斷是否有許可權。
⑵ php用戶許可權分配界面
說一下我的思路(RBAC 模式),供你參考,郵箱不發了,由於資料庫需要保密,截圖也不貼了。
你在左側導航欄做三個菜單項,分別是:
1. 用戶管理
2. 角色管理
3. 許可權管理
其中 1 和 2 給管理員操作,管理員可以對其進行增刪改查等操作;3 由軟體開發者操作,不能分配給管理員;普通用戶對 1、2、3 都無權操作。
許可權管理界面,軟體開發者可以對各種許可權進行增刪改查;
角色管理界面,管理員進去後可以對角色進行增冊改查操作;具體可以這樣安排界面,右欄主區分成上中下三塊,上面這塊提供添加及查詢操作,中間塊顯示查詢結果,下面這塊查詢結果中某條記錄的明細。 增加按鈕點擊後,在明細區出現填寫表單,具體需要填哪些內容由開發者定,一般角色名為必填項,然後同時在右邊給出一個選擇許可權的列表,提供復選框讓管理員為角色勾選分配許可權;
用戶管理界面跟角色界面類似,只是管理員在創建用戶時是勾選角色而不是許可權。
大體思路就是這樣。
(PS: 資料庫中當然要先設計好用戶表、角色表、許可權表、用戶角色關聯表、角色許可權關聯表等等)
⑶ php 用戶許可權控制如何設計
可以是這樣子設計許可權路由表,比如:,寫成配置文件或資料庫中。
//菜單配置
'content'=>array(
'新聞文章'=>array(
'欄目管理'=>array('Classify/index','type='.CLASS_ARTICLE),
'文章管理'=>'Article/index',
'回收站'=>array('Article/index','trash=1'),
),
'圖集'=>array(
'分類管理'=>array('Classify/index','type='.CLASS_ATLAS),
'圖集管理'=>'Atlas/index',
//'添加圖片'=>'Picture/index',
),
'品牌管理'=>array(
'分類管理'=>array('Classify/index','type='.CLASS_BRAND),
'品牌管理'=>'Brand/index',
),
),
//許可權配置
'Config'=>array(
'name'=>'系統配置',
'controller'=>'Config',
'action'=>array(
'index'=>array('系統配置','t=1')//帶參數的方法
)
),
'Channel'=>array(//控制器
'name'=>'導航管理',
'controller'=>'Channel',
'action'=>array(//方法
'index'=>'導航列表',
'add'=>'導航(新增/編輯)',
'sort'=>'導航排序',
'del'=>'刪除導航',
)
),
'Article'=>array(
'name'=>'新聞文章管理',
'controller'=>'Article',
'action'=>array(
'index'=>'新聞文章列表',
'add'=>'新聞文章(新增/編輯)',
'trash'=>'新聞文章刪除(回收站)',
'reset'=>'新聞文章恢復(回收站)',
'del'=>'刪除新聞文章',
)
),
1.在用戶登錄後,獲取到用戶許可權列表,不同角色對應不同許可權列表
2.根據用戶許可權列表與菜單列表進行比對,如果該菜單無許可權則移除
3.在父類中增加對當前控制器許可權進行檢查
⑷ php後台多用戶許可權設置及實現思路
adminconfig.php 這是後台系統中所有文件許可權配置。
fun.php 這是一個功能函數
left.php 網站後台根據用戶登錄的ID來載入相對應的功能菜單
op.php 調用adminconfig.php 默認許可權文件
opsava.php 保存用戶許可權成一個php文件
好了我們先來看看 fun.php文件吧。
. 代碼如下:
<?
function findsub($keys ,$userid='abc' ) //此函數重要就是為了調用用戶的許可權信息
{
include('user/'.$userid.'.php');
foreach($bb as $key=>$submenu)
{
foreach($submenu as $subkey=>$menuitem)
{
if( $subkey == $keys )
{
return 1;
}
}
}
}
//下面為生成用戶的php許可權文件
//寫入
function cache_write($name, $var, $values) {
$cachefile = 'op/www.hzhuti.com/'.$name.'.php';
$cachetext = "<?phprn".'$'.$var.'='.arrayeval($values)."rn?>";
if(!swritefile($cachefile, $cachetext))
{
exit("File: $cachefile write error.");
}
}
//數組轉換成字串
function arrayeval($array, $level = 0) {
$space = '';
for($i = 0; $i <= $level; $i++) {
$space .= "t";
}
$evaluate = "Arrayn$space(n";
$comma = $space;
foreach($array as $key => $val) {
$key = is_string($key) ? '''.addcslashes($key, ''\').''' : $key;
$val = !is_array($val) && (!preg_match("/^-?d+$/", $val) || strlen($val) > 12) ? '''.addcslashes($val, ''\').''' : $val;
if(is_array($val)) {
$evaluate .= "$comma$key => ".arrayeval($val, $level + 1);
} else {
$evaluate .= "$comma$key => $val";
}
$comma = ",n$space";
}
$evaluate .= "n$space)";
return $evaluate;
}
//寫入文件
function swritefile($filename, $writetext, $openmod='w') {
if(@$fp = fopen($filename, $openmod)) {
flock($fp, 2);
fwrite($fp, $writetext);
fclose($fp);
return true;
} else {
exit("File: $filename write error.");
return false;
}
}
?>
adminconfig.php 後台許可權配置文件,以一個數組形式保存
. 代碼如下:
<?
$menus = array(
'news' => array(
'caption'=>'資訊管理',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'newsaddtype' => array('caption' => '分類增加', 'url' => 'news/addtype.php'),
'newstypemange' => array('caption' => '分類管理', 'url' => 'news/typemange.php'),
'newsnewsend' => array('caption' => '發布資訊', 'url' => 'news/newsend.php'),
'newsnewmange' => array('caption' => '資訊管理', 'url' => 'news/newmange.php'),
'newscomments' => array('caption' => '評論管理', 'url' => 'news/comments.php'),
),
),
'ask' => array(
'caption'=>'問卷調查',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'voteadmin_subject_add' => array('caption' => '添加投票主題', 'url' => 'vote/admin_subject_add.php'),
'voteadmin_subject' => array('caption' => '管理投票主題', 'url' => 'vote/admin_subject.php'),
'voteadmin_title_add' => array('caption' => '添加投票問題', 'url' => 'vote/admin_title_add.php'),
'voteadmin_title' => array('caption' => '管理投票問題', 'url' => 'vote/admin_title.php'),
'voteadmin_question_add' => array('caption' => '添加投票答案', 'url' => 'vote/admin_question_add.php'),
'voteadmin_question' => array('caption' => '管理投票答案', 'url' => 'vote/admin_question.php'),
'voteadmin_system' => array('caption' => '投票初始配置', 'url' => 'vote/admin_system.php')
),
),
'ads' => array(
'caption'=>'廣告管理',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'ada' => array('caption' => '增加廣告', 'url' => 'ada.php'),
'adm' => array('caption' => '廣告管理', 'url' => 'adm.php'),
'flashadd' => array('caption' => '焦點圖廣告增加', 'url' => 'flashadd.php'),
'flashad' => array('caption' => '焦點圖廣告管理', 'url' => 'flashad.php')
),
),
'mange' => array(
'caption'=>'系統管理員',
'icon'=>'admin/icon_15.gif',
'sub' => array(
'adminuser' => array('caption' => '管理員添加', 'url' => 'adminuser.php'),
'modpass' => array('caption' => '密碼修改', 'url' => 'modpass.php')
),
),
);
?>
left.php文件很簡單就是根據用戶登錄後ID讀出許可權
. 代碼如下:
<?
$userid = $_SESSION['adminid'];
include("op/admincofig.php");
include("op/ www.hzhuti.com /".$userid.".php");
foreach($bb as $key=>$submenu)
{
echo "<tr><td bgcolor="#D879A7" style="line-height:22px;text-align:center;color:#ffffff;"> nr <font color="#EA6A8D" face="Webdings"></font><b>".$menus[$key]['caption']."</b><br /></td></tr> nr <tr ><td bgcolor="F5E8F1">";
foreach($submenu as $subkey=>$menuitem)
{
$tmparr = explode("|",$menuitem);
echo "<font color="#EA6A8D" face="Webdings">4</font><a href='".$tmparr[1]."' target="mainframe">".$tmparr[0]."</a><br> nr";
}
echo "</td></tr> nr ";
}
op.php這個文件就是要調用我們的adminconfig.php文件,然後利用fun.php文件中函數把提供過來的數據保存成數組如圖
點擊保存我們調用了opsava.php 文件,代碼如下
. 代碼如下:
<?
include("op/fun.php");
if( $_POST )
{
$sarray = $_POST ;
cache_write($userid,'bb',$sarray);//寫入緩存
echo "<script>alert('編輯保存成功!');location='op.php?userid=".$userid."';</script>";
}
?>
保存成功後文件內容如
. 代碼如下:
<?php
$bb=Array
(
'member' => Array
(
'user_search' => '會員升級管理|user_search.php'
),
'membercy' => Array
(
'cyuser_search' => '會員升級管理|cyuser_search.php',
'cyuser_search5' => '交友會員|cyuser_search.php?grade=5'
),
'userid' => 7,
'button' => '保存編輯'
)
?>
這樣的話我們的left只要載入 7.php文件就只會顯示這里在的文件,這樣一個基本的後台許可權就完成了。
⑸ php許可權管理
這應該是頁面雙重包含的問題吧。function auth()中申請的用戶許可權控制在當前框架下的所有頁面都會發生作用(index.php頁麵包含之後,如果失敗,main.php和left.php都無法載入),你取消main.php和left.php的包含文件試試。
⑹ 關於PHP許可權設計,該怎麼處理
如果是後台許可權的話可以新建幾個表
1,用戶表,欄位(id,username,password,....)
2,後台菜單表,欄位(id,父id,menu_name,menu_url)
3,用戶級別許可權表(id,用戶id)
4,用戶組表(許可權級別名稱,狀態,可查看的菜單id(以英文逗號隔開))
實現流程,用戶登錄->連表獲取用戶許可權(用戶級別許可權表),當前許可權可查看的菜單數組(用戶組表)->通過用戶組表的字元串去後台菜單表遍歷可查看的菜單
⑺ 在php網站中用戶許可權
4個表
用戶表(用戶信息表)
許可權表(設置可以訪問的頁面)
角色表(如果申請用戶的時候有多項選擇的時候添加,沒有則不需要)
用戶許可權對應關系表(這個表是用於給每個用戶賦權)
如果用戶訪問頁面的時候,判斷是否存在訪問許可權(查用戶許可權對應關系表),如果有正常訪問,如果沒有頁面跳轉。不過跳到登錄頁面感覺不太合理,你判斷用戶是否有許可權的時候,他應該是登錄狀態,如果再跳到登錄頁面感覺不合理。
判斷是否存在訪問許可權可以封裝成公共類,每個頁面初始化的時候都調用這個公共類。可以通過用戶ID進行判斷。
同是普通用戶,那就加標識,判斷的時候再判斷一下標識,然後根據標識進行頁面跳轉。
以上,希望能幫到你。
⑻ php 許可權控制實現方式有幾種
1.PHP5提供了3種訪問方式:
2.分別是一下幾種:
(1)public:可以被毫無限制地訪問,類外部的任何代碼都可以讀寫public屬性,在PHP5之前的版本中,所有的方法和屬性都是public。
(2)private:只在類的內部可見,類中的任何成員和類實例都可以訪問private成員,在所在類之外,不能改變或者讀取private屬性的值,也不能調用private的方法。子類也不能訪問父類的private成員。
(3)protected:能被同類和繼承出的類的方法訪問到。
如果沒有指明,默認均為public。