我对权限控制系统的看法_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 搭載アプリ

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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ワンクリックで root 権限を有効にします (root 権限をすばやく取得します) ワンクリックで root 権限を有効にします (root 権限をすばやく取得します) Jun 02, 2024 pm 05:32 PM

ルート権限は、Android システムの管理者権限です。 root 権限を取得するには、通常、一連の面倒な手順が必要ですが、これは一般ユーザーにとってはあまり使いやすいものではないかもしれません。この記事では、ワンクリックで root 権限を有効にすることで、ユーザーがシステム権限を簡単に取得できるシンプルかつ効果的な方法を紹介します。 root 権限の重要性とリスクを理解し、root 権限を使用すると、ユーザーは携帯電話システムを完全に制御できるようになります。セキュリティ管理を強化し、テーマをカスタマイズし、ユーザーはプリインストールされたアプリケーションを削除できます。ただし、たとえば、システム ファイルを誤って削除してシステム クラッシュを引き起こしたり、root 権限を過剰に使用したり、マルウェアを誤ってインストールしたりすることも危険です。 root権限を使用する前に

Windows 11 ガイドの探索: 古いハード ドライブ上のユーザー フォルダーにアクセスする方法 Windows 11 ガイドの探索: 古いハード ドライブ上のユーザー フォルダーにアクセスする方法 Sep 27, 2023 am 10:17 AM

特定のフォルダーは権限の関係で常にアクセスできるわけではありません。今日のガイドでは、Windows 11 で古いハード ドライブ上のユーザー フォルダーにアクセスする方法を説明します。このプロセスは簡単ですが、ドライブのサイズによっては、しばらく時間がかかり、場合によっては数時間もかかる場合があるため、特に忍耐強く、このガイドの指示に厳密に従ってください。古いハードドライブ上のユーザーフォルダーにアクセスできないのはなぜですか?ユーザー フォルダーは別のコンピューターによって所有されているため、変更できません。このフォルダーには所有権以外の権限がありません。古いハードドライブ上のユーザーファイルを開くにはどうすればよいですか? 1. フォルダーの所有権を取得し、アクセス許可を変更します。 古いユーザー ディレクトリを見つけて右クリックし、[プロパティ] を選択します。 「An」に移動します

Linuxでファイルを削除するにはどのような権限が必要ですか Linuxでファイルを削除するにはどのような権限が必要ですか Jul 11, 2023 pm 01:26 PM

Linux でファイルを削除するには、ファイルが配置されているフォルダーのすべてのアクセス許可 (読み取り、書き込み、実行) が必要です。このファイルを見つけるプロセスではフォルダーに入る必要があるため、rm /xxx/fle と同様の方法を使用した場合でも、そのフォルダーはシステム内にも入ることになるため、フォルダーに対する実行権限と読み取り権限が必要です。フォルダーの内容を読み取り、最後にファイルを削除する必要があります。ファイルは上位フォルダーの一部であるため、フォルダーに対する書き込み権限が必要です。

iOS 17: 写真にアクセスできるアプリを制御する方法 iOS 17: 写真にアクセスできるアプリを制御する方法 Sep 13, 2023 pm 09:09 PM

iOS17 では、Apple はアプリが写真に表示できるものをより詳細に制御できるようになりました。アプリごとにアプリへのアクセスを管理する方法については、この記事を読んでください。 iOS では、Apple のアプリ内フォト ピッカーを使用して、特定の写真をアプリと共有できますが、写真ライブラリの残りの部分は非公開のままです。アプリは写真ライブラリ全体へのアクセスを要求する必要があり、アプリに次のアクセスを許可するかどうかを選択できます: 制限付きアクセス – アプリは選択できる画像のみを表示できます。これは、アプリ内でいつでも行うか、[設定] に移動することで実行できます。 &gt ;プライバシーとセキュリティ>写真をクリックして、選択した画像を表示します。フルアクセス - アプリで写真を表示できます

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 アプリケーションの作成および開発に広く使用されているプログラミング言語です。多くの 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 フォーラムの読み取り許可設定と、さまざまなニーズに合わせて柔軟に設定する方法を詳しく紹介します。 1. 読み取り権限の基本概念 Discuz フォーラムでは、読み取り権限には主に次の概念が含まれており、理解する必要があります。 デフォルトの読み取り権限: 新規ユーザー登録後のデフォルト

See all articles