PermissionAttachment: better document the apparently nonsensical code responsible for making sure the entire permission system doesn't burn down

This commit is contained in:
Dylan K. Taylor 2020-11-28 16:05:16 +00:00
parent ab18332572
commit ef034f2d68

View File

@ -123,7 +123,16 @@ class PermissionAttachment{
if($this->permissions[$name] === $value){
return;
}
unset($this->permissions[$name]); //Fixes children getting overwritten
/* Because of the way child permissions are calculated, permissions which were set later in time are
* preferred over earlier ones when conflicts in inherited permission values occur.
* Here's the kicker: This behaviour depends on PHP's internal array ordering, which maintains insertion
* order -- BUT -- assigning to an existing index replaces the old value WITHOUT changing the order.
* (what crazy person thought relying on this this was a good idea?!?!?!?!?!)
*
* This removes the old value so that the new value will be added at the end of the array's internal order
* instead of directly taking the place of the older value.
*/
unset($this->permissions[$name]);
}
$this->permissions[$name] = $value;
$this->permissible->recalculatePermissions();