နောက်ခံစီမံခန့်ခွဲမှုစနစ်သို့မဟုတ်ခွင့်ပြုချက်စီမံခန့်ခွဲမှု module တစ်ခုတည်ဆောက်ရာတွင်ခွင့်ပြုချက်ထိန်းချုပ်မှုသည်များသောအားဖြင့်မရှိမဖြစ်လိုအပ်သောအစိတ်အပိုင်းတစ်ခုဖြစ်သည်။ ပုံမှန်ဇာတ်လမ်းတစ်ပုဒ်သည်စနစ်တွင်ခွင့်ပြုချက်အပြည့်အစုံရှိသည်။ အသုံးပြုသူတစ် ဦး ချင်းစီသည်ခွင့်ပြုချက်များ၏တစ်စိတ်တစ်ပိုင်းကိုသာခွင့်ပြုထားသည်။ အသုံးပြုသူများသည် interface သို့မဟုတ် executing function များကိုမတင်ပြမီအသုံးပြုသူများသည် 0 င်ရောက်ခြင်းကိုထိရောက်စွာစစ်ထုတ်နိုင်ရန်အတွက်ကျွန်ုပ်တို့သည်ခွင့်ပြုချက်စစ်ထုတ်ခြင်းအတွက်တိကျမှန်ကန်ပြီးထိရောက်သောနည်းလမ်းလိုအပ်သည်။ PHP မှပေးသော array_diff_ukey () function သည်ဤခွင့်ပြုချက်ကိုအချို့သောအခြေအနေများတွင်အကောင်အထည်ဖော်နိုင်သည်။
ဤဆောင်းပါးသည် array_diff_ukey () ကို အသုံးပြု. အသုံးပြုသူခွင့်ပြုချက်စစ်ထုတ်ခြင်းများကိုမည်သို့ထိရောက်စွာအကောင်အထည်ဖော်ရမည်ကိုသရုပ်ပြရန်လက်တွေ့ကျသောဥပမာကိုအသုံးပြုမည်။
စနစ်သည်ခွင့်ပြုချက်အပြည့်အစုံကိုသတ်မှတ်သည်ဆိုပါစို့။
$allPermissions = [
'user.view' => 'အသုံးပြုသူများကိုကြည့်ပါ',
'user.edit' => 'အသုံးပြုသူကိုတည်းဖြတ်ပါ',
'post.view' => 'ဆောင်းပါးကိုကြည့်ပါ',
'post.edit' => 'ဆောင်းပါးကိုတည်းဖြတ်ပါ',
'admin.panel' => 'နောက်ခံသို့သွားရောက်ပါ',
];
သာမန်အသုံးပြုသူတစ် ဦး ၏ခွင့်ပြုချက်များသည်အောက်ပါအတိုင်းဖြစ်သည် -
$userPermissions = [
'user.view' => true,
'post.view' => true,
];
သစ်ခုတ်ခြင်း, လုံခြုံရေးစစ်ဆေးခြင်းသို့မဟုတ်ခွင့်ပြုချက်ပေးသည့်အချက်များစသည့်လုပ်ဆောင်ချက်များအတွက်အသုံးပြုသူသည်အသုံးပြုသူ သည်ပိုင်ဆိုင်သော ခွင့်ပြုချက်စာရင်းကိုရယူလိုပါသည်။
array_diff_ukey () function ကို၏ function ကို၏ function သည် array နှစ်ခု၏အဓိကအမည်များကိုနှိုင်းယှဉ်ကြည့်ရန်နှင့် Custom နှိုင်းယှဉ်မှုအတွက် callback function ကိုသုံးပါ။
အသုံးပြုသူသည် ဒေါ်လာ alperports ဖြင့်ပိုင်ဆိုင်ခြင်းမရှိသောခွင့်ပြုချက်ရရန်ကျွန်ုပ်တို့အသုံးပြုနိုင်သည်။
$diff = array_diff_ukey(
$allPermissions,
$userPermissions,
function($key1, $key2) {
return strcmp($key1, $key2);
}
);
အထက်ဖော်ပြပါကုဒ်များတွင် ဒေါ်လာကွဲပြားမှုသည် အသုံးပြုသူများအားလုံးပိုင်ခွင့်မရှိသောခွင့်ပြုချက်များပါ 0 င်သည့်နေရာတစ်ခုသို့ပြန်သွားလိမ့်မည်။
[
'user.edit' => 'အသုံးပြုသူကိုတည်းဖြတ်ပါ',
'post.edit' => 'ဆောင်းပါးကိုတည်းဖြတ်ပါ',
'admin.panel' => 'နောက်ခံသို့သွားရောက်ပါ',
]
စီမံခန့်ခွဲမှုဆိုင်ရာစီမံခန့်ခွဲမှုသည်ပြုပြင်ပြောင်းလဲမှုများအတွက်အသုံးပြုသူတစ် ဦး ၏ခွင့်ပြုချက်ကိုပြသသောခွင့်ပြုချက်ကိုပြသသောခွင့်ပြုချက် configuration စာမျက်နှာတစ်ခုရှိသည်ဆိုပါစို့။ ငါတို့လုပ်နိုင်တယ် -
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;
}
output ရလဒ် -
ခွင့်ပြုချက်ပျောက်နေ: အသုံးပြုသူကိုတည်းဖြတ်ပါ (user.edit)
ခွင့်ပြုချက်ပျောက်နေ: ဆောင်းပါးကိုတည်းဖြတ်ပါ (post.edit)
ခွင့်ပြုချက်ပျောက်နေ: နောက်ခံသို့သွားရောက်ပါ (admin.panel)
ခွင့်ပြုချက်စာရင်းစစ်စနစ် - သုံးစွဲသူခွင့်ပြုချက်ပြင်ဆင်မှုကိုပြန်လည်သုံးသပ်သည့်အခါပျောက်ဆုံးနေသောပစ္စည်းများကိုလျင်မြန်စွာရှာဖွေပါ။
ခြားနားချက်သစ်ထုတ်လုပ်ခြင်း - အသုံးပြုသူခွင့်ပြုချက်မရှိမဖြစ်ရှိရှိနှင့်ပြီးနောက်ကွဲပြားခြားနားမှုများကိုမှတ်တမ်းတင်ပါ။
Front-end Property Tree Filtering : Dynamically dynamically ရှေ့တန်း - အဆုံးအပြောင်းအလဲနဲ့ funters လုပ်ထားတဲ့ function ကိုတည်ဆောက်ရန်။
URL ခွင့်ပြုချက်စိစစ်ခြင်း ဥပမာအားဖြင့်:
$permissions = [
'/dashboard' => '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;
}
ထုတ်လုပ်မှု -