此代码块检查项目或人员是否存在于特定组中,并授权仅查看那些存在的成员。有四个这样的组和多个场景或概率。这感觉就像代码气味,并希望要知道一个更好的方法.fyi:item1,item2,item3,item4是组的键
if ((in_array('item1', (Authorization::getAdmin($Id)))) &&
(in_array('item2', (Authorization::getAdmin($Id)))) &&
(in_array('item3', (Authorization::getAdmin($Id)))) &&
((in_array('item4', (Authorization::getAdmin($Id)))))) {
}
elseif ((in_array('item2', (Authorization::getAdmin($Id)))) &&
((in_array('item3', (Authorization::getAdmin($Id))))) &&
((in_array('item4', (Authorization::getAdmin($Id)))))){
}
elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
((in_array('item3', (Authorization::getAdmin($Id))))) &&
((in_array('item4', (Authorization::getAdmin($Id)))))){
}
elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
((in_array('item2', (Authorization::getAdmin($Id))))) &&
((in_array('item4', (Authorization::getAdmin($Id)))))){
}
elseif ((in_array('item3', (Authorization::getAdmin($Id)))) &&
((in_array('item2', (Authorization::getAdmin($Id))))) &&
((in_array('item4', (Authorization::getAdmin($Id)))))){
}
elseif ((in_array('item3', (Authorization::getAdmin($Id)))) &&
((in_array('item2', (Authorization::getAdmin($Id))))) &&
((in_array('item1', (Authorization::getAdmin($Id)))))){
}
elseif ((in_array('item2', (Authorization::getAdmin($Id)))) &&
((in_array('item3', (Authorization::getAdmin($Id)))))) {
}
elseif ((in_array('item3', (Authorization::getAdmin($Id)))) &&
((in_array('item1', (Authorization::getAdmin($Id)))))) {
}
elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
((in_array('item2', (Authorization::getAdmin($Id)))))) {
}
elseif ((in_array('item1', (Authorization::getAdmin($Id)))) &&
((in_array('item4', (Authorization::getAdmin($Id)))))) {
}
elseif ((in_array('item4', (Authorization::getAdmin($Id)))) &&
((in_array('item2', (Authorization::getAdmin($Id)))))) {
}
elseif ((in_array('item4', (Authorization::getAdmin($Id)))) &&
((in_array('item3', (Authorization::getAdmin($Id)))))) {
}
elseif(in_array('item1',(Authorization::getAdmin($Id))))
{
}
elseif(in_array('item2',(Authorization::getAdmin($Id))))
{
}
elseif(in_array('item3',(Authorization::getAdmin($Id))))
{
}
elseif(in_array('item4',(Authorization::getAdmin($Id))))
{
}
}
答案 0 :(得分:2)
如果我理解正确,你可以将其减少到:
$groups = Authorization::getAdmin($Id);
foreach (['item1', 'item2', 'item3', 'item4'] as $group_key) {
if (in_array($group_key, $groups)) {
// give authorization to view that group
}
}
答案 1 :(得分:1)
绝对将静态函数调用结果放入局部变量中。这将为您节省大量处理能力并减少代码。
我喜欢Don't Panic的解决方案,并会扩展它以使用您的权限矩阵对其进行交叉索引...
$permissions = ['I can do this' => ['item1'], 'I can do that' => ['item1', 'item2'], ... ];
$groups = Authorization::getAdmin($Id);
$authorization = [];
foreach (['item1', 'item2', 'item3', 'item4'] as $group_key) {
if (in_array($group_key, $groups)) {
$authorization[] = $group_key;
}
}
获得权限结果的方法是快速搜索数组。
$permission = array_search($authorization, $permissions );
这只会给你一个单一的结果;如果它比这更复杂,你可能需要构建一个复杂的语句来对其进行排序。