ユーザーのための簡単なアクセスチェックを作成しようとしています。PHP:ユーザーが特定のグループに再帰的にアクセスできるかどうかを確認するにはどうすればいいですか?
$levels = ['trial' => [], 'enterprise' => ['admin'], 'paid' => ['trial'],
'admin' => ['paid', 'editor'], 'editor' => []];
がpaid
グループを見てみましょう:基本的に私はこのように定義されたtrial
、paid
、admin
、などのようなグループの配列を持っています。 paid
グループはtrial
グループの配列にあります。paid
グループのユーザーはtrial
グループにアクセスすることもできます。 admin
がその配列内paid
基を有し、paid
基は、その配列内trial
基を有するため
同様admin
基が(私は推測再帰を必要とする)paid
、editor
とtrial
グループにアクセスすることができます。
My機能は、このようなものです(私は再帰部分を把握することはできません):
<?php
public function hasAccess($requiredLevel, $myLevel) {
global $levels;
return (($myLevel == $requiredLevel) || (in_array($requiredLevel, $levels[$myLevel]));
}
これは、例えば、レベルは、アレイ内に直接存在する場合に動作しますが、関連付けを作るために失敗しましたレベルが接続されているときadmin => paid => trial
この関数を簡単に再帰的にチェックできるようにこの関数を変更する方法はありますか?
P.それらが格納される順序も固定されていません。
素晴らしい!今はとても簡単に見えますが、私はちょうど再帰の周りで頭を包むことができませんでした。コード内の詳細なコメントに感謝します。また、循環参照ビットについて説明してください。 2つのレベルが 'admin' => ['paid']と 'paid' => ['admin']のように互いに参照している場合、または他の場合はありますか?どのように私はそれに対して保護するのですか?本当にありがとう。 – supersan
はい、私は循環参照の意味です。私は自分の答えを更新しました。 –