首頁 後端開發 php教程 我对权限控制系统的看法_PHP

我对权限控制系统的看法_PHP

Jun 01, 2016 pm 12:36 PM
Level 控制系統 權限 看法

请大家给个思路! ---- 刁馋

# 我曾经做了一个权限控制系统,由于需要修改,而我没有找到有效的解决方法,
# 请大家给出出主意,给个大体思路,谢谢!要求如下:
# 1.每个父亲节点下边有多个孩子
# 2.每个孩子可能有一个父亲,还可能有多个父亲(多个父亲的级别可能不同,也
#   就是有交叉现象)
# 3.每个父亲可能管理相同的孩子或者不同的孩子
# 4.每个父亲登陆的时候,只能看到自己的孩子(如果管理的孩子不同,则登陆的
#   父亲只能看到自己下边的孩子,如果相同,那么他们看到的孩子都一样)
# 5.每个父亲可以添加自己的父亲(孩子?)

由问题的提出,可得到如下树状结构。关键在于如何保存这个树和怎样检索。

--0--                          000 (虚拟的根)
                                |
            +-------------------+---------------+
--1--      001                 002             003
            |                   |               |
         +--+--+           +----+----+       +--+--+
--2--   003   004         004  006  007     007   008
               |           |                 |
               |        +--+--+           +--+--+
--3--         007      003   008         001   002
                        |
                   +----+----+
--4--             005  007  006

其中004登录后,应看到(1,001)-[2,004]-(3,007)和(1,002)-[2,004]-(3,003)-(4,007)等
而不应看到(1,003)-(2,007)。
即所有用户在登录后向下搜索孩子,可能在多个分支上进行。

设有两张表
表一保存所有成员的信息(以下简称U),主键id_u
表二为成员间的关系(以下简称K),主键id
U
  id_u | name | ...
-------+------+----
  001  |      |    
  002  |      |    
  003  |      |    
  004  |      |    
  005  |      |    
  006  |      |    
  ...  |      |    

K
id  | id_u | level | next | previons | right
-----+------+-------+------+----------+-------
  1  |  001 |     1 |    2 |          |    5
  2  |  003 |     2 |      |        1 |    3
  3  |  004 |     2 |    4 |        1 |
  4  |  007 |     3 |      |        3 |
  5  |  002 |     1 |    6 |          |   14
  6  |  004 |     2 |    7 |        5 |   12
  7  |  003 |     3 |    9 |        6 |    8
  8  |  008 |     3 |      |        6 |
  9  |  005 |     4 |      |        7 |   10
10  |  006 |     4 |      |        7 |   11
11  |  007 |     4 |      |        7 |
12  |  006 |     2 |      |        5 |   13
13  |  007 |     2 |      |        5 |
14  |  003 |     1 |   15 |          |
15  |  007 |     2 |   16 |       14 |   18
16  |  001 |     3 |      |       15 |   17
17  |  002 |     3 |      |       15 |
18  |  008 |     2 |      |       14 |
    
其中:level 保存级别, next 保存下级的id, previons 保存上级的id, right 保存右邻的id
关于具体的数据组织视算法而定。
数的遍历算法,是很经典的了!
建议用数组计算,即一次性读入到数组,效率可能高一点

测试例,previons项未用

$ar = array(
0,
array(id=> 1,id_u=>"001", level=>1, next=> 2, previons=> 0, right=> 5),
array(id=> 2,id_u=>"003", level=>2, next=> 0, previons=> 1, right=> 3),
array(id=> 3,id_u=>"004", level=>2, next=> 4, previons=> 1, right=> 0),
array(id=> 4,id_u=>"007", level=>3, next=> 0, previons=> 3, right=> 0),
array(id=> 5,id_u=>"002", level=>1, next=> 6, previons=> 0, right=>14),
array(id=> 6,id_u=>"004", level=>2, next=> 7, previons=> 5, right=>12),
array(id=> 7,id_u=>"003", level=>3, next=> 9, previons=> 6, right=> 8),
array(id=> 8,id_u=>"008", level=>3, next=> 0, previons=> 6, right=> 0),
array(id=> 9,id_u=>"005", level=>4, next=> 0, previons=> 7, right=>10),
array(id=>10,id_u=>"006", level=>4, next=> 0, previons=> 7, right=>11),
array(id=>11,id_u=>"007", level=>4, next=> 0, previons=> 7, right=> 0),
array(id=>12,id_u=>"006", level=>2, next=> 0, previons=> 5, right=>13),
array(id=>13,id_u=>"007", level=>2, next=> 0, previons=> 5, right=> 0),
array(id=>14,id_u=>"003", level=>1, next=>15, previons=> 0, right=> 0),
array(id=>15,id_u=>"007", level=>2, next=>16, previons=>14, right=>18),
array(id=>16,id_u=>"001", level=>3, next=> 0, previons=>15, right=>17),
array(id=>17,id_u=>"002", level=>3, next=> 0, previons=>15, right=> 0),
array(id=>18,id_u=>"008", level=>2, next=> 0, previons=>14, right=> 0)
);
//print_r($ar);

function tree($ar,$i,$key,$level) {
  if($ar[$i][id_u] == $key || $ar[$i][level] > $level) {
    for($j=0;$j       echo "    ";
    echo "+--";
    echo $ar[$i][id_u]."
";
    if($ar[$i][next] > 0)
      tree($ar,$ar[$i][next],$key,$level);
  }
  if($ar[$i][right] > 0)
    tree($ar,$ar[$i][right],$key,$level);
}

$keys = array("001","002","003","004","005","006","007","008");

while(list($key,$value) = each($keys)) {
  echo "===> $value
";
  for($i=1;$i     if($ar[$i][id_u] == $value) {
      echo "    [$value]
";
      tree($ar,$i,$value,$ar[$i][level]);
    }
  }
}
?>

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

一鍵開啟root權限(快速取得root權限) 一鍵開啟root權限(快速取得root權限) Jun 02, 2024 pm 05:32 PM

可以讓使用者對系統進行更深入的操作和定制,root權限是一種管理員權限,在Android系統中。取得root權限通常需要一系列繁瑣的步驟,對於一般使用者來說可能不太友善、然而。透過一鍵開啟root權限,本文將介紹一種簡單而有效的方法,幫助使用者輕鬆取得系統權限。了解root權限的重要性及風險擁有更大的自由度,root權限可以讓使用者完全控製手機系統。加強安全控制等,客製化主題、使用者可刪除預先安裝應用程式。例如誤刪系統檔案導致系統崩潰,過度使用root權限也有風險、不慎安裝惡意軟體等,然而。在使用root權限前

探索Windows 11指南:如何存取舊硬碟上的使用者資料夾 探索Windows 11指南:如何存取舊硬碟上的使用者資料夾 Sep 27, 2023 am 10:17 AM

由於權限,並不總是可以存取某些資料夾,在今天的指南中,我們將向您展示如何在Windows11上的舊硬碟上存取使用者資料夾。此過程很簡單,但可能需要一段時間,有時甚至數小時,具體取決於驅動器的大小,因此請格外耐心並嚴格按照本指南中的說明進行操作。為什麼我無法存取舊硬碟上的使用者資料夾?使用者資料夾的所有權屬於另一台電腦,因此您無法對其進行修改。除了所有權之外,您對該資料夾沒有任何權限。如何開啟舊硬碟上的使用者檔案? 1.取得資料夾的所有權並更改權限找到舊的使用者目錄,右鍵單擊它,然後選擇屬性。導航至“安

iOS 17:如何控制哪些應用程式可以存取您的照片 iOS 17:如何控制哪些應用程式可以存取您的照片 Sep 13, 2023 pm 09:09 PM

在iOS17中,Apple可以更好地控制應用程式可以看到的照片內容。繼續閱讀,了解如何按應用程式管理應用程式存取權限。在iOS中,Apple的應用程式內照片選取器可讓您與應用程式分享特定照片,而照片圖庫的其餘部分則保持私密。應用程式必須要求存取您的整個照片圖庫,您可以選擇授予應用程式以下存取權限:受限存取–應用程式只能看到您可以選擇的圖像,您可以隨時在應用程式中或透過前往「設定」&gt ;“隱私和安全性”>“照片”來查看所選圖像。完全存取權限–App可以查看照片

linux刪除檔案需要什麼權限 linux刪除檔案需要什麼權限 Jul 11, 2023 pm 01:26 PM

linux刪除檔案需要所在資料夾的所有權限,分別是讀取、寫入、執行。因為定位這個檔案過程就需要進入資料夾,即使使用類似rm /xxx/fle的方式,同樣系統內部也會進入資料夾,所以要對資料夾有執行權限,然後讀取資料夾內容需要讀取的權限,最後是刪除文件,由於文件是上級資料夾的一部分所以需要對資料夾有寫的權限。

qq空間如何設定權限訪問 qq空間如何設定權限訪問 Feb 23, 2024 pm 02:22 PM

qq空間如何設定權限存取?在QQ空間中是可以設定權限訪問,但是多數的小夥伴不知道QQ空間如何設定權限存取的功能,接下來就是小編為使用者帶來的qq空間設定權限存取方法圖文教程,有興趣的用戶快來一起看看吧! QQ使用教學qq空間如何設定權限存取1、先開啟QQ應用,主頁點選左上角【頭像】點選;2、然後左側展開個人資訊專區,點選左下角【設定】功能;3、進入設定頁面滑動,找到其中的【隱私】選項;4、接下來在隱私的介面,其中的【權限設定】服務;5、之後挑戰到最新頁面選擇【空間動態】;6、再次在QQ空間設置

PHP如何實作角色權限管理系統? PHP如何實作角色權限管理系統? Jun 29, 2023 pm 07:57 PM

PHP是一種廣泛應用的程式語言,被廣泛用於創建和開發各種Web應用程式。在許多網路應用程式中,角色權限管理系統是一個重要的功能,它可以確保不同使用者擁有適當的存取權限。本文將介紹如何使用PHP來實作一個簡單而實用的角色權限管理系統。角色權限管理系統的基本概念是將使用者分為不同的角色,並為每個角色分配相應的權限。這樣,使用者只能執行他們有權限執行的操作,從而確保系統的

CentOS搭建web伺服器前需注意的權限與存取控制策略 CentOS搭建web伺服器前需注意的權限與存取控制策略 Aug 05, 2023 am 11:13 AM

CentOS搭建web伺服器前需注意的權限與存取控制策略在建置web伺服器的過程中,權限與存取控制策略是非常重要的一環。正確設定權限和存取控制策略可以保護伺服器的安全性,防止非授權使用者存取敏感資料或對伺服器進行不當操作。本文將介紹在CentOS系統下建置web伺服器時需要注意的權限與存取控制策略,並提供對應的程式碼範例。使用者與群組的管理首先,我們需要建立一個專

Discuz論壇權限管理:閱讀權限設定指南 Discuz論壇權限管理:閱讀權限設定指南 Mar 10, 2024 pm 05:33 PM

Discuz論壇權限管理:閱讀權限設定指南在Discuz論壇管理中,權限設定是至關重要的一環。其中,閱讀權限的設定尤其重要,它決定了不同使用者在論壇中能夠看到的內容範圍。本文將詳細介紹Discuz論壇的閱讀權限設置,以及如何針對不同的需求進行靈活的配置。一、閱讀權限基礎概念在Discuz論壇中,閱讀權限主要有以下幾個概念需要了解:預設閱讀權限:新使用者註冊後預設

See all articles