백그라운드 관리 시스템 또는 권한 관리 모듈을 개발할 때 권한 제어는 일반적으로 필수 불가결 한 부분입니다. 일반적인 시나리오는 시스템에 전체 권한 세트가 있으며 각 사용자는 권한의 일부만 부여된다는 것입니다. 인터페이스를 제시하거나 기능을 실행하기 전에 사용자가 가지고 있지 않은 권한을 효과적으로 필터링하려면 권한 필터링을위한 정확하고 효율적인 방법이 필요합니다. PHP가 제공하는 Array_diff_ukey () 함수는 일부 시나리오 에서이 권한 필터링을 구현할 수 있습니다.
이 기사는 실제 예제를 사용하여 Array_Diff_Ukey ()를 사용하여 사용자 권한 필터링을 효율적으로 구현하는 방법을 보여줍니다.
시스템이 전체 권한 세트를 정의한다고 가정합니다.
$allPermissions = [
'user.view' => '사용자를 봅니다',
'user.edit' => '사용자 편집',
'post.view' => '기사를보십시오',
'post.edit' => '기사를 편집하십시오',
'admin.panel' => '배경을 방문하십시오',
];
일반 사용자의 권한은 다음과 같습니다.
$userPermissions = [
'user.view' => true,
'post.view' => true,
];
우리는 사용자가 로깅, 보안 검사 또는 권한 프롬프트와 같은 기능에 대해 소유하지 않는 권한 목록을 얻고 싶습니다.
Array_diff_ukey () 함수의 함수는 두 배열의 키 이름을 비교하고 콜백 함수를 사용자 정의 비교에 사용하고 첫 번째 배열에는 존재하지만 다른 배열에는없는 키 값 쌍을 반환하는 것 입니다.
우리는이를 사용하여 사용자가 $ allpermissions 에서 소유하지 않는 권한을 얻을 수 있습니다.
$diff = array_diff_ukey(
$allPermissions,
$userPermissions,
function($key1, $key2) {
return strcmp($key1, $key2);
}
);
위의 코드에서 $ diff는 모든 사용자가 소유하지 않은 권한을 포함하는 배열을 반환합니다.
[
'user.edit' => '사용자 편집',
'post.edit' => '기사를 편집하십시오',
'admin.panel' => '배경을 방문하십시오',
]
관리자에게 조정을 위해 특정 사용자의 항목이 누락 된 권한을 보여주는 권한 구성 페이지가 있다고 상상해보십시오. 우리는 이것을 할 수 있습니다 :
function getMissingPermissions(array $allPermissions, array $userPermissions): array {
return array_diff_ukey(
$allPermissions,
$userPermissions,
fn($a, $b) => strcmp($a, $b)
);
}
// 모든 권한
$allPermissions = [
'user.view' => '사용자를 봅니다',
'user.edit' => '사용자 편집',
'post.view' => '기사를보십시오',
'post.edit' => '기사를 편집하십시오',
'admin.panel' => '배경을 방문하십시오',
];
// 사용자가 소유 한 권한
$userPermissions = [
'user.view' => true,
'post.view' => true,
];
// 누락 된 권한을 얻으십시오
$missing = getMissingPermissions($allPermissions, $userPermissions);
// 출력 결과
foreach ($missing as $code => $desc) {
echo "누락 된 권한: $desc ($code)" . PHP_EOL;
}
출력 결과는 다음과 같습니다.
누락 된 권한: 사용자 편집 (user.edit)
누락 된 권한: 기사를 편집하십시오 (post.edit)
누락 된 권한: 배경을 방문하십시오 (admin.panel)
권한 감사 시스템 : 사용자 권한 구성을 검토 할 때 누락 된 항목을 빠르게 찾으십시오.
차이 로깅 : 사용자 권한 변경 전후의 차이점을 기록하십시오.
프론트 엔드 권한 트리 필터링 : 프론트 엔드 처리를위한 사용자 저속 기능 항목을 동적으로 구축합니다.
URL 권한 검증 : 라우팅 권한 식별과 액세스 제어를 통합합니다. 예를 들어:
$permissions = [
'/dashboard' => '대시 보드에 액세스하십시오',
'/admin/users' => '사용자를 관리합니다',
'/admin/settings' => '시스템 설정',
];
$userPermissions = [
'/dashboard' => true,
];
$unauthorized = array_diff_ukey($permissions, $userPermissions, 'strcmp');
foreach ($unauthorized as $url => $desc) {
echo "사용자는 액세스 권한이 없습니다: https://m66.net$url ($desc)" . PHP_EOL;
}
산출: