public function registerValidators() { Validator::extend('rolePermission', function ($attribute, $array) { $flag = true; if (is_array($array)) { foreach ($array as $value) { if ($attribute == "roles") { if ($value == '@') { continue; } $check = Role::where('name', $value); } else { $check = Permission::where('name', $value); } if (!$check->count()) { $flag = false; break; } } } else { $flag = false; } return $flag; }, 'Roles or permissions are invalid.'); }
public function assignRole($id, Request $request) { $user = AppUser::find($id); if (!$user) { return response()->json(null, 404); } $roleIdOrName = $request->roleIdOrName; $field = is_numeric($roleIdOrName) ? 'id' : 'name'; $role = Role::where($field, $roleIdOrName)->first(); if (!$role) { return response()->json(arrayView('phpsoft.users::errors/validation', ['errors' => ['Role does not exist.']]), 400); } $hasRole = $user->hasRole($role->name); if ($hasRole) { return response()->json(null, 204); } $user->attachRole($role); return response()->json(null, 204); }
public function testBrowseWithOrderRightParams() { $roles = []; for ($i = 0; $i < 10; ++$i) { $roles[] = factory(Role::class)->create(['name' => 'admin ' . $i, 'display_name' => 'Administrator ' . $i]); } $rolesID = Role::select('*')->orderBy('id', 'desc')->get(); $rolesDisplayName = Role::select('*')->orderBy('display_name', 'asc')->get(); $rolesName = Role::select('*')->orderBy('name', 'desc')->get(); // check order roles with full input $res = $this->call('GET', '/roles?sort=name&direction=desc'); $this->assertEquals(200, $res->getStatusCode()); $results = json_decode($res->getContent()); for ($i = 0; $i < count($rolesName); ++$i) { $this->assertEquals($rolesName[$i]->id, $results->entities[$i]->id); } $res = $this->call('GET', '/roles?sort=display_name&direction=asc'); $this->assertEquals(200, $res->getStatusCode()); $results = json_decode($res->getContent()); for ($i = 0; $i < count($results->entities); ++$i) { $this->assertEquals($rolesDisplayName[$i]->id, $results->entities[$i]->id); } // check order roles with equals value of order field, roles is sorted follow id field with desc $roles = []; for ($i = 0; $i < 10; ++$i) { if (in_array($i, [2, 4, 6])) { $roles[] = factory(Role::class)->create(['display_name' => 'Administrator']); } $roles[] = factory(Role::class)->create(); } $roles1 = Role::where('display_name', '=', 'Administrator')->orderBy('id', 'desc')->get(); $roles2 = Role::where('display_name', '<>', 'Administrator')->orderBy('order', 'asc')->get(); $roles = array_merge((array) $roles1, (array) $roles2); $res = $this->call('GET', '/roles?sort=display_name&direction=asc'); $this->assertEquals(200, $res->getStatusCode()); $results = json_decode($res->getContent()); for ($i = 1; $i < count($roles); ++$i) { $this->assertEquals($roles[$i]->id, $results->entities[$i]->id); } }