/** * @param $input * @throws GeneralException * @return bool */ public function create($input) { if (Role::where('name', $input['name'])->first()) { throw new GeneralException(trans('exceptions.backend.access.roles.already_exists')); } //See if the role has all access $all = $input['associated-permissions'] == 'all' ? true : false; //This config is only required if all is false if (!$all) { if (config('access.roles.role_must_contain_permission') && count($input['permissions']) == 0) { throw new GeneralException(trans('exceptions.backend.access.roles.needs_permission')); } } $role = new Role(); $role->name = $input['name']; $role->sort = isset($input['sort']) && strlen($input['sort']) > 0 && is_numeric($input['sort']) ? (int) $input['sort'] : 0; //See if this role has all permissions and set the flag on the role $role->all = $all; if ($role->save()) { if (!$all) { $current = explode(',', $input['permissions']); $permissions = []; if (count($current)) { foreach ($current as $perm) { if (is_numeric($perm)) { array_push($permissions, $perm); } } } $role->attachPermissions($permissions); } return true; } throw new GeneralException(trans('exceptions.backend.access.roles.create_error')); }
/** * @param $input * @throws GeneralException * @return bool */ public function create($input) { if (Role::where('name', $input['name'])->first()) { throw new GeneralException('That role already exists. Please choose a different name.'); } //See if the role has all access $all = $input['associated-permissions'] == 'all' ? true : false; //This config is only required if all is false if (!$all) { if (config('access.roles.role_must_contain_permission') && count($input['permissions']) == 0) { throw new GeneralException('You must select at least one permission for this role.'); } } $role = new Role(); $role->name = $input['name']; $role->sort = isset($input['sort']) && strlen($input['sort']) > 0 && is_numeric($input['sort']) ? (int) $input['sort'] : 0; //See if this role has all permissions and set the flag on the role $role->all = $all; if ($role->save()) { if (!$all) { $current = explode(',', $input['permissions']); $permissions = []; if (count($current)) { foreach ($current as $perm) { if (is_numeric($perm)) { array_push($permissions, $perm); } } } $role->attachPermissions($permissions); } return true; } throw new GeneralException('There was a problem creating this role. Please try again.'); }
/** * @param Role $role * @param $input * @throws GeneralException * @return bool */ public function update(Role $role, $input) { //See if the role has all access, administrator always has all access if ($role->id == 1) { $all = true; } else { $all = $input['associated-permissions'] == 'all' ? true : false; } if (!isset($input['permissions'])) { $input['permissions'] = []; } //This config is only required if all is false if (!$all) { //See if the role must contain a permission as per config if (config('access.roles.role_must_contain_permission') && count($input['permissions']) == 0) { throw new GeneralException(trans('exceptions.backend.access.roles.needs_permission')); } } $role->name = $input['name']; $role->sort = isset($input['sort']) && strlen($input['sort']) > 0 && is_numeric($input['sort']) ? (int) $input['sort'] : 0; //See if this role has all permissions and set the flag on the role $role->all = $all; DB::transaction(function () use($role, $input, $all) { if ($role->save()) { //If role has all access detach all permissions because they're not needed if ($all) { $role->permissions()->sync([]); } else { //Remove all roles first $role->permissions()->sync([]); //Attach permissions if the role does not have all access $permissions = []; if (is_array($input['permissions']) && count($input['permissions'])) { foreach ($input['permissions'] as $perm) { if (is_numeric($perm)) { array_push($permissions, $perm); } } } $role->attachPermissions($permissions); } event(new RoleUpdated($role)); return true; } throw new GeneralException(trans('exceptions.backend.access.roles.update_error')); }); }