This code block checks if the item or the person is present in a particular group and gives authorization to view to only those members present.There are four such groups and multiple scenarios or probabilities.This feels like a code smell and would like to know a better way to do.fyi:item1, item2, item3, item4 are the keys for the groups
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))))
{
}
}
If I understand correctly, you could reduce it to this:
$groups = Authorization::getAdmin($Id);
foreach (['item1', 'item2', 'item3', 'item4'] as $group_key) {
if (in_array($group_key, $groups)) {
// give authorization to view that group
}
}
Definitely put the static function call result into a local variable. That'll save you a lot of processing power and reduce code.
I like Don't Panic's solution and would expand on it to cross-index it with your permission matrix...
$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;
}
}
And a way to get the permission result is a quick array search.
$permission = array_search($authorization, $permissions );
This gets you a singular result only; if it's more complex than that, you may have to build a complex statement to sort it out.