メニュー許可管理は、役割に基づく許可管理システムを開発する際の重要な部分です。さまざまなユーザーまたはロールがさまざまなメニュー項目にアクセスできるようにするために、PHPの組み込み関数array_diff()を使用して、ユーザーがアクセスできるメニュー項目を比較およびフィルタリングできます。この記事では、 array_diff()関数を使用して差別化されたメニュー許可管理システムを実装する方法を紹介します。
PHPでは、 array_diff()関数を使用して2つ以上の配列を比較でき、最初の配列に存在するが他の配列にはない要素を返します。その基本的な使用法は次のとおりです。
array_diff(array $array1, array $array2, array ...$arrays): array
この関数は、$ array1に要素を含む配列を返しますが、 $ array2およびその他のアレイでは返されません。
メニュー許可管理では、各ユーザーには許可識別子のセット(通常はメニュー項目のID)があり、システムはユーザーの役割に基づいて表示するメニューを決定します。 array_diff()関数を使用して、管理者の完全なメニューと通常のユーザーのメニューとの違いを生み、それにより差別化されたメニュー許可を取得できます。
まず、すべてのメニュー項目を含む配列と各ユーザーの配列を定義します。たとえば、複数のメニュー項目を備えたシステムがあり、各メニュー項目に一意のIDがあるとします。
// システム内のすべてのメニュー項目
$all_menus = [
1 => 'フロントページ',
2 => 'ユーザー管理',
3 => '製品管理',
4 => '注文管理',
5 => '財務諸表',
6 => 'システム設定'
];
// 管理者のメニュー権限
$admin_permissions = [1, 2, 3, 4, 5, 6]; // 管理者はすべてのメニューにアクセスできます
// 通常のユーザーのメニュー許可
$user_permissions = [1, 2, 3, 4]; // 通常のユーザーはいくつかのメニューのみにアクセスできます
次に、 array_diff()を使用して、管理者メニューの差別化された部分と通常のユーザーメニューを取得します。返品したいメニューは、通常のユーザーがアクセスする許可を持たないメニュー項目です。つまり、管理者が持っていないメニュー項目ですが、普通のユーザーは持っていません。
// 管理者と通常のユーザーメニューの違いを取得します
$diff_permissions = array_diff($admin_permissions, $user_permissions);
// 差別化されたメニュー許可を印刷します
echo "管理者専用のメニュー許可:\n";
foreach ($diff_permissions as $menu_id) {
echo $all_menus[$menu_id] . "\n";
}
上記のコードを介して、管理者が通常のユーザーにアクセスすることはできませんが、メニュー項目を出力できます。実行結果は次のとおりです。
管理者専用のメニュー許可:
財務諸表
システム設定
実際の許可管理システムでは、ユーザーの権限に基づいてさまざまなメニューリンクを動的に表示する必要があります。メニュー項目を特定のURLにリンクする必要があると仮定すると、メニューアレイにURLを含めて、許可がフィルタリングされたときにURLをフィルタリングできます。
// 定義テープ URL メニュー項目
$menus_with_url = [
1 => ['name' => 'フロントページ', 'url' => 'https://www.m66.net/home'],
2 => ['name' => 'ユーザー管理', 'url' => 'https://www.m66.net/user-management'],
3 => ['name' => '製品管理', 'url' => 'https://www.m66.net/product-management'],
4 => ['name' => '注文管理', 'url' => 'https://www.m66.net/order-management'],
5 => ['name' => '財務諸表', 'url' => 'https://www.m66.net/financial-report'],
6 => ['name' => 'システム設定', 'url' => 'https://www.m66.net/system-settings']
];
// 管理者と通常のユーザーメニューの違いを取得します
$diff_permissions = array_diff($admin_permissions, $user_permissions);
// 差別化されたメニューとそれら URL
echo "管理者専用のメニュー許可及链接:\n";
foreach ($diff_permissions as $menu_id) {
echo $menus_with_url[$menu_id]['name'] . " - " . $menus_with_url[$menu_id]['url'] . "\n";
}
実行結果は次のようになります。
管理者専用のメニュー許可及链接:
財務諸表 - https://www.m66.net/financial-report
システム設定 - https://www.m66.net/system-settings
上記の方法により、PHPのarray_diff()関数を使用して、差別化されたメニュー許可管理システムを実装します。管理者はすべてのメニューにアクセスできますが、通常のユーザーは認定メニューのみにアクセスできます。 URLと組み合わせて、各メニュー項目のアクセスリンクを提供して、ユーザーエクスペリエンスをさらに強化できます。
このようにして、ユーザーがアクセスする許可を持つメニューを動的に表示するだけでなく、特定のユーザーに表示されるメニュー項目を効果的に制御することもできます。この機能を実際のニーズに応じて拡張し、許可制御ロジックを追加できます。