protected function getRoles(User $user = null)
{
$roles = [];
$self = $user && $user->id === App::user()->id;
foreach (Role::where(['id <> ?'], [Role::ROLE_ANONYMOUS])->orderBy('priority')->get() as $role) {
$r = $role->jsonSerialize();
if ($role->isAuthenticated()) {
$r['disabled'] = true;
}
if ($user && $role->isAdministrator() && (!App::user()->isAdministrator() || $self)) {
$r['disabled'] = true;
}
$roles[$r['id']] = $r;
}
return $roles;
}