현재 위치: > 최신 기사 목록> 권한 필터링 기능을 구현할 때 Array_Diff_UKey ()를 사용하는 방법

권한 필터링 기능을 구현할 때 Array_Diff_UKey ()를 사용하는 방법

M66 2025-06-06

백그라운드 관리 시스템 또는 권한 관리 모듈을 개발할 때 권한 제어는 일반적으로 필수 불가결 한 부분입니다. 일반적인 시나리오는 시스템에 전체 권한 세트가 있으며 각 사용자는 권한의 일부만 부여된다는 것입니다. 인터페이스를 제시하거나 기능을 실행하기 전에 사용자가 가지고 있지 않은 권한을 효과적으로 필터링하려면 권한 필터링을위한 정확하고 효율적인 방법이 필요합니다. PHP가 제공하는 Array_diff_ukey () 함수는 일부 시나리오 에서이 권한 필터링을 구현할 수 있습니다.

이 기사는 실제 예제를 사용하여 Array_Diff_Ukey ()를 사용하여 사용자 권한 필터링을 효율적으로 구현하는 방법을 보여줍니다.

1. 장면 설명

시스템이 전체 권한 세트를 정의한다고 가정합니다.

 $allPermissions = [
    'user.view' => '사용자를 봅니다',
    'user.edit' => '사용자 편집',
    'post.view' => '기사를보십시오',
    'post.edit' => '기사를 편집하십시오',
    'admin.panel' => '배경을 방문하십시오',
];

일반 사용자의 권한은 다음과 같습니다.

 $userPermissions = [
    'user.view' => true,
    'post.view' => true,
];

우리는 사용자가 로깅, 보안 검사 또는 권한 프롬프트와 같은 기능에 대해 소유하지 않는 권한 목록을 얻고 싶습니다.

2. array_diff_ukey ()를 사용하여 필터링하십시오

Array_diff_ukey () 함수의 함수는 두 배열의 키 이름을 비교하고 콜백 함수를 사용자 정의 비교에 사용하고 첫 번째 배열에는 존재하지만 다른 배열에는없는 키 값 쌍을 반환하는 것 입니다.

우리는이를 사용하여 사용자가 $ allpermissions 에서 소유하지 않는 권한을 얻을 수 있습니다.

 $diff = array_diff_ukey(
    $allPermissions,
    $userPermissions,
    function($key1, $key2) {
        return strcmp($key1, $key2);
    }
);

위의 코드에서 $ diff는 모든 사용자가 소유하지 않은 권한을 포함하는 배열을 반환합니다.

 [
    'user.edit' => '사용자 편집',
    'post.edit' => '기사를 편집하십시오',
    'admin.panel' => '배경을 방문하십시오',
]

3. 비즈니스 논리를 결합한 완전한 예

관리자에게 조정을 위해 특정 사용자의 항목이 누락 된 권한을 보여주는 권한 구성 페이지가 있다고 상상해보십시오. 우리는 이것을 할 수 있습니다 :

 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)

4. 일반적인 응용 프로그램 시나리오

  • 권한 감사 시스템 : 사용자 권한 구성을 검토 할 때 누락 된 항목을 빠르게 찾으십시오.

  • 차이 로깅 : 사용자 권한 변경 전후의 차이점을 기록하십시오.

  • 프론트 엔드 권한 트리 필터링 : 프론트 엔드 처리를위한 사용자 저속 기능 항목을 동적으로 구축합니다.

  • 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;
}

산출: