찾다
백엔드 개발PHP 튜토리얼我对权限控制系统的看法_PHP

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

# 我曾经做了一个权限控制系统,由于需要修改,而我没有找到有效的解决方法,
# 请大家给出出主意,给个大体思路,谢谢!要求如下:
# 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으로 문의하세요.
探索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的应用内照片选取器可让您与应用共享特定照片,而照片图库的其余部分则保持私密。应用必须请求访问您的整个照片图库,您可以选择授予应用以下访问权限:受限访问–应用程序只能看到您可以选择的图像,您可以随时在应用程序中或通过转到“设置”>“隐私和安全”>“照片”来查看所选图像。完全访问权限–App可以查看照片

linux删除文件需要什么权限linux删除文件需要什么权限Jul 11, 2023 pm 01:26 PM

linux删除文件需要所在文件夹的所有权限,分别是读、写、执行。因为定位这个文件过程就需要进入文件夹,即使使用类似rm /xxx/fle的方式,同样系统内部也会进入文件夹,所以要对文件夹有执行权限,然后读取文件夹内容需要读的权限,最后是删除文件,由于文件是上级文件夹的一部分所以需要对文件夹有写的权限。

CentOS搭建web服务器前需注意的权限与访问控制策略CentOS搭建web服务器前需注意的权限与访问控制策略Aug 05, 2023 am 11:13 AM

CentOS搭建web服务器前需注意的权限与访问控制策略在搭建web服务器的过程中,权限与访问控制策略是非常重要的一环。正确设置权限和访问控制策略可以保护服务器的安全性,防止非授权用户访问敏感数据或者对服务器进行不当操作。本文将介绍在CentOS系统下搭建web服务器时需要注意的权限与访问控制策略,并提供相应的代码示例。用户与组的管理首先,我们需要创建一个专

PHP如何实现角色权限管理系统?PHP如何实现角色权限管理系统?Jun 29, 2023 pm 07:57 PM

PHP是一种广泛应用的编程语言,被广泛用于创建和开发各种Web应用程序。在许多Web应用中,角色权限管理系统是一个重要的功能,它可以确保不同用户拥有适当的访问权限。本文将介绍如何使用PHP来实现一个简单而实用的角色权限管理系统。角色权限管理系统的基本概念是将用户分为不同的角色,并为每个角色分配相应的权限。这样,用户只能执行他们有权限执行的操作,从而保证系统的

手机档案存取权限是什么手机档案存取权限是什么Jul 19, 2022 pm 03:50 PM

手机档案存取权限是指允许APK文件读写手机的内存;如果允许APK文件访问手机的内存,那么就可以将应用安装在手机中,如果不允许APK文件访问手机的内存,那么手机就不能安装应用。

学习Python,开发智能家居控制系统学习Python,开发智能家居控制系统Jan 19, 2024 am 09:04 AM

在当今科技智能化的时代,智能家居系统正成为人们日常生活的标配,从智能门锁、智能灯泡,到智能音箱、智能家电等,智能家居正在逐渐地渗入到我们的生活中。而Python作为一种近年来较为流行的编程语言,其快速开发、易于学习、功能强大的特点,使其成为了许多智能家居控制系统的首选开发语言。那么,本文将介绍如何使用Python和树莓派,开发一个简单的智能家居控制系统,并提

win7修改文件提示更改权限拒绝访问如何解决win7修改文件提示更改权限拒绝访问如何解决Jul 04, 2023 pm 07:01 PM

  win7修改文件提示更改权限拒绝访问如何解决?一些系统文件在进行修改的时候,常常会提示我们没有权限去进行操作。我们可以去进行文件夹权限的功能关闭,或者获取管理员权限。需要修改此类文件的用户,一起来看看接下来具体的教程分享吧。win7修改文件提示更改权限拒绝访问解决办法  1、首先选中对应文件夹,点击上方工具,选中文件夹选项。  2、进入查看选项卡。  3、取消勾选使用简单文件共享然后确定。  4、然后右键选择对应文件夹,点击属性。  5、进入安全选项卡。  6、选择图示位置,点击高级。  7

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.