From d8092404adad3d0f629604bfd67bddff277d101b Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sat, 28 Oct 2017 20:56:50 +0800 Subject: [PATCH] Remove user roles feature --- app/Entities/Users/User.php | 71 ------------------------------- app/Entities/Users/UserPresenter.php | 17 +------- app/Entities/Users/UsersRepository.php | 33 +++++--------- app/Http/Controllers/AuthController.php | 5 +-- app/Http/Requests/Users/UpdateRequest.php | 3 +- app/Providers/AuthServiceProvider.php | 2 +- tests/Feature/Auth/MemberLoginTest.php | 1 - tests/Feature/ManageFeaturesTest.php | 63 +++++++++++++-------------- tests/Feature/ManageTasksTest.php | 39 +++-------------- tests/Feature/Users/ManageUsersTest.php | 2 - tests/Unit/Models/UserTest.php | 41 ------------------ 11 files changed, 52 insertions(+), 225 deletions(-) diff --git a/app/Entities/Users/User.php b/app/Entities/Users/User.php index afaba08..384cc14 100644 --- a/app/Entities/Users/User.php +++ b/app/Entities/Users/User.php @@ -25,77 +25,6 @@ class User extends Authenticatable return link_to_route('users.show', $this->name, [$this->id], ['target' => '_blank']); } - /** - * A user may have multiple roles. - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function roles() - { - return $this->belongsToMany(Role::class); - } - - /** - * Assign the given role to the user. - * - * @param string $role - * @return mixed - */ - public function assignRole($roleName) - { - $role = Role::firstOrNew(['name' => $roleName]); - - if ($role->exists == false) { - $role->type = 0; - $role->label = ucwords($roleName); - $role->save(); - } - - return $this->roles()->attach($role); - } - - /** - * Remove the given role from the user. - * - * @param string $role - * @return mixed - */ - public function removeRole($role) - { - $roleId = Role::whereName($role)->firstOrFail()->id; - return $this->roles()->detach($roleId); - } - - /** - * Determine if the user has the given role. - * - * @param mixed $role - * @return boolean - */ - public function hasRole($role) - { - if (is_string($role)) { - return $this->roles->contains('name', $role); - } - - return ! ! $role->intersect($this->roles)->count(); - } - - public function hasRoles(array $roleNameArray) - { - return $this->roles->pluck('name') - ->contains(function ($role, $key) use ($roleNameArray) { - return in_array($role, $roleNameArray); - }); - } - - public function scopeHasRoles($query, array $roleNameArray) - { - return $query->whereHas('roles', function ($q) use ($roleNameArray) { - $q->whereIn('name', $roleNameArray); - }); - } - public function agency() { return $this->hasOne('App\Entities\Agencies\Agency', 'owner_id'); diff --git a/app/Entities/Users/UserPresenter.php b/app/Entities/Users/UserPresenter.php index 2ca756d..69eb84e 100644 --- a/app/Entities/Users/UserPresenter.php +++ b/app/Entities/Users/UserPresenter.php @@ -2,7 +2,6 @@ namespace App\Entities\Users; -use Html; use Laracasts\Presenter\Presenter; class UserPresenter extends Presenter @@ -10,10 +9,6 @@ class UserPresenter extends Presenter public function displayRoles() { $string = ''; - foreach($this->roles as $key => $role) { - $string .= ($key != 0) ? ' | ' : ''; - $string .= $role->label; - } return $string; } @@ -21,23 +16,15 @@ class UserPresenter extends Presenter public function rolesLink() { $string = ''; - foreach($this->roles as $key => $role) { - $string .= ($key != 0) ? ' | ' : ''; - $string .= link_to_route('users.index', $role->label, ['role' => $role->name], ['title' => 'Lihat semua ' . $role->label]); - } return $string; } public function usernameRoles() { - $string = $this->name . ' ('; - foreach($this->roles as $key => $role) { - $string .= ($key != 0) ? ' | ' : ''; - $string .= $role->label; - } + $string = $this->name.' ('; $string .= ')'; return $string; } -} \ No newline at end of file +} diff --git a/app/Entities/Users/UsersRepository.php b/app/Entities/Users/UsersRepository.php index 9204e36..e44755e 100755 --- a/app/Entities/Users/UsersRepository.php +++ b/app/Entities/Users/UsersRepository.php @@ -3,13 +3,11 @@ namespace App\Entities\Users; use App\Entities\BaseRepository; use App\Exceptions\UpdateUserException; -use App\Exceptions\UserDeleteException; -use App\Exceptions\UserNotFoundException; use App\Services\Facades\Option; /** -* Users Repository Class -*/ + * Users Repository Class + */ class UsersRepository extends BaseRepository { @@ -23,23 +21,17 @@ class UsersRepository extends BaseRepository public function getUsers($q, $rolesString) { return $this->model->latest() - ->where('name','like','%'.$q.'%') - ->whereHas('roles', function($query) use ($rolesString) { - if (!is_null($rolesString)) { - $query->whereIn('name', explode('|', $rolesString)); - } - }) - ->with('roles') - ->paginate($this->_paginate); + ->where('name', 'like', '%'.$q.'%') + ->paginate($this->_paginate); } public function create($userData) { - if ($userData['password'] == '') - $userData['password'] = Option::get('password_default','member'); + if ($userData['password'] == '') { + $userData['password'] = Option::get('password_default', 'member'); + } $user = $this->storeArray($userData); - $user->roles()->sync($userData['role']); return $user; } @@ -49,28 +41,25 @@ class UsersRepository extends BaseRepository $user = $this->requireById($userId); foreach ($userData as $key => $value) { - if ($value == '' || $key == 'role') continue; $user->{$key} = $value; } - $user->roles()->sync($userData['role']); - - if ($user->save()) + if ($user->save()) { return $user; + } throw new UpdateUserException('Failed to update User'); } public function getRolesList() { - return Role::where('type', 0)->pluck('label','id')->all(); + return Role::where('type', 0)->pluck('label', 'id')->all(); } public function delete($userId) { $user = $this->requireById($userId); - $user->roles()->detach(); return $user->delete(); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 18c8bc5..2efdbab 100755 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -31,9 +31,6 @@ class AuthController extends Controller $registerData['api_token'] = str_random(32); $user = User::create($registerData); - $user->assignRole('admin'); - $user->assignRole('worker'); - Auth::login($user); $agency = Agency::create([ 'name' => $request->get('agency_name'), @@ -42,6 +39,8 @@ class AuthController extends Controller 'owner_id' => $user->id, ]); + Auth::login($user); + flash()->success(trans('auth.welcome', ['name' => $user->name])); return redirect()->route('home'); } diff --git a/app/Http/Requests/Users/UpdateRequest.php b/app/Http/Requests/Users/UpdateRequest.php index d1a0421..28a6037 100644 --- a/app/Http/Requests/Users/UpdateRequest.php +++ b/app/Http/Requests/Users/UpdateRequest.php @@ -25,8 +25,7 @@ class UpdateRequest extends Request { return [ 'name' => 'required|min:5', - 'email' => 'required|email|unique:users,email,' . $this->segment(2), - 'role' => 'required|array', + 'email' => 'required|email|unique:users,email,'.$this->segment(2), 'password' => 'nullable|required_with:password_confirmation|between:6,15|confirmed', 'password_confirmation' => 'required_with:password', ]; diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 2f91ad5..455d663 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -36,7 +36,7 @@ class AuthServiceProvider extends ServiceProvider } Gate::define('add_project', function ($user) { - return $user->hasRole('admin'); + return ! is_null($user->agency); }); Gate::define('manage_project', function ($user, $project) { diff --git a/tests/Feature/Auth/MemberLoginTest.php b/tests/Feature/Auth/MemberLoginTest.php index c12129b..af8edb6 100644 --- a/tests/Feature/Auth/MemberLoginTest.php +++ b/tests/Feature/Auth/MemberLoginTest.php @@ -11,7 +11,6 @@ class MemberLoginTest extends TestCase public function user_can_login_and_logout() { $user = factory(User::class)->create(['name' => 'Nama Member', 'email' => 'email@mail.com']); - $user->assignRole('worker'); $this->visit(route('auth.login')); diff --git a/tests/Feature/ManageFeaturesTest.php b/tests/Feature/ManageFeaturesTest.php index 527120f..81864d4 100644 --- a/tests/Feature/ManageFeaturesTest.php +++ b/tests/Feature/ManageFeaturesTest.php @@ -24,21 +24,21 @@ class ManageFeaturesTest extends TestCase $this->seePageIs(route('features.create', $project->id)); $this->submitForm(trans('feature.create'), [ - 'name' => 'Nama Fitur Baru', - 'price' => 100000, - 'worker_id' => $worker->id, - 'type_id' => 1, + 'name' => 'Nama Fitur Baru', + 'price' => 100000, + 'worker_id' => $worker->id, + 'type_id' => 1, 'description' => 'Similique, eligendi fuga animi?', ]); $this->see(trans('feature.created')); $this->seeInDatabase('features', [ - 'name' => 'Nama Fitur Baru', - 'price' => 100000, - 'worker_id' => $worker->id, - 'type_id' => 1, - 'project_id' => $project->id + 'name' => 'Nama Fitur Baru', + 'price' => 100000, + 'worker_id' => $worker->id, + 'type_id' => 1, + 'project_id' => $project->id, ]); } @@ -46,9 +46,6 @@ class ManageFeaturesTest extends TestCase public function admin_can_edit_feature_data() { $user = factory(User::class, 3)->create(); - $user[0]->assignRole('admin'); - $user[1]->assignRole('worker'); - $user[2]->assignRole('worker'); $this->actingAs($user[0]); $project = factory(Project::class)->create(['owner_id' => $user[0]->id]); @@ -58,10 +55,10 @@ class ManageFeaturesTest extends TestCase $this->visit(route('features.edit', $feature->id)); $this->submitForm(trans('feature.update'), [ - 'name' => 'Nama Fitur Edit', - 'price' => 33333, + 'name' => 'Nama Fitur Edit', + 'price' => 33333, 'worker_id' => $user[2]->id, - 'type_id' => 2, + 'type_id' => 2, ]); $this->seePageIs(route('features.show', $feature->id)); @@ -69,11 +66,11 @@ class ManageFeaturesTest extends TestCase $this->see(trans('feature.updated')); $this->seeInDatabase('features', [ - 'name' => 'Nama Fitur Edit', - 'price' => 33333, - 'worker_id' => $user[2]->id, + 'name' => 'Nama Fitur Edit', + 'price' => 33333, + 'worker_id' => $user[2]->id, 'project_id' => $project->id, - 'type_id' => 2 + 'type_id' => 2, ]); } @@ -84,11 +81,11 @@ class ManageFeaturesTest extends TestCase $project = factory(Project::class)->create(['owner_id' => $user->id]); $feature = factory(Feature::class)->create(['project_id' => $project->id]); - $tasks = factory(Task::class, 2)->create(['feature_id' => $feature->id]); + $tasks = factory(Task::class, 2)->create(['feature_id' => $feature->id]); $this->seeInDatabase('features', [ - 'name' => $feature->name, - 'price' => $feature->price, + 'name' => $feature->name, + 'price' => $feature->price, 'project_id' => $project->id, ]); @@ -103,8 +100,8 @@ class ManageFeaturesTest extends TestCase $this->see(trans('feature.deleted')); $this->notSeeInDatabase('features', [ - 'name' => $feature->name, - 'price' => $feature->price, + 'name' => $feature->name, + 'price' => $feature->price, 'project_id' => $project->id, ]); @@ -119,7 +116,7 @@ class ManageFeaturesTest extends TestCase $user = $this->adminUserSigningIn(); $project = factory(Project::class)->create(['owner_id' => $user->id]); - $feature = factory(Feature::class)->create(['project_id' => $project->id,'type_id' => 1]); + $feature = factory(Feature::class)->create(['project_id' => $project->id, 'type_id' => 1]); $this->visit(route('projects.features', $project->id)); $this->click('show-feature-'.$feature->id); @@ -137,8 +134,8 @@ class ManageFeaturesTest extends TestCase $projects = factory(Project::class, 2)->create(['owner_id' => $user->id]); $features = factory(Feature::class, 3)->create(['project_id' => $projects[0]->id]); - $tasks1 = factory(Task::class, 3)->create(['feature_id' => $features[0]->id]); - $tasks2 = factory(Task::class, 3)->create(['feature_id' => $features[1]->id]); + $tasks1 = factory(Task::class, 3)->create(['feature_id' => $features[0]->id]); + $tasks2 = factory(Task::class, 3)->create(['feature_id' => $features[1]->id]); $this->visit(route('projects.features', $projects[1]->id)); @@ -166,16 +163,16 @@ class ManageFeaturesTest extends TestCase $this->seeInDatabase('features', [ 'project_id' => $projects[1]->id, - 'name' => $features[0]->name, - 'price' => $features[0]->price, - 'worker_id' => $features[0]->worker_id, + 'name' => $features[0]->name, + 'price' => $features[0]->price, + 'worker_id' => $features[0]->worker_id, ]); $this->seeInDatabase('features', [ 'project_id' => $projects[1]->id, - 'name' => $features[1]->name, - 'price' => $features[1]->price, - 'worker_id' => $features[1]->worker_id, + 'name' => $features[1]->name, + 'price' => $features[1]->price, + 'worker_id' => $features[1]->worker_id, ]); } diff --git a/tests/Feature/ManageTasksTest.php b/tests/Feature/ManageTasksTest.php index 5de7f4a..b088283 100644 --- a/tests/Feature/ManageTasksTest.php +++ b/tests/Feature/ManageTasksTest.php @@ -13,7 +13,6 @@ class ManageTasksTest extends TestCase public function admin_can_entry_task() { $user = factory(User::class)->create(); - $user->assignRole('admin'); $this->actingAs($user); $feature = factory(Feature::class)->create(['worker_id' => $user->id]); @@ -32,8 +31,8 @@ class ManageTasksTest extends TestCase $this->seePageIs('features/'.$feature->id); $this->see(trans('task.created')); $this->seeInDatabase('tasks', [ - 'name' => 'Nama Task Baru', - 'progress' => 70, + 'name' => 'Nama Task Baru', + 'progress' => 70, 'feature_id' => $feature->id, 'route_name' => 'tasks/create', ]); @@ -43,8 +42,6 @@ class ManageTasksTest extends TestCase public function admin_can_edit_task_data() { $user = factory(User::class)->create(); - $user->assignRole('admin'); - $user->assignRole('worker'); $this->actingAs($user); $feature = factory(Feature::class)->create(['worker_id' => $user->id]); @@ -65,9 +62,9 @@ class ManageTasksTest extends TestCase $this->seePageIs('features/'.$feature->id); $this->see(trans('task.updated')); $this->seeInDatabase('tasks', [ - 'name' => 'Nama Task Edit', - 'progress' => 77, - 'feature_id' => $feature->id + 'name' => 'Nama Task Edit', + 'progress' => 77, + 'feature_id' => $feature->id, ]); } @@ -75,8 +72,6 @@ class ManageTasksTest extends TestCase public function admin_can_delete_a_task() { $user = factory(User::class)->create(); - $user->assignRole('admin'); - $user->assignRole('worker'); $this->actingAs($user); $feature = factory(Feature::class)->create(['worker_id' => $user->id]); @@ -90,28 +85,4 @@ class ManageTasksTest extends TestCase $this->seePageIs('features/'.$feature->id); $this->see(trans('task.deleted')); } - - // /** @test */ - // public function admin_can_see_all_tasks() - // { - // $user = factory(User::class)->create(); - // $user->assignRole('admin'); - // $user->assignRole('worker'); - // $this->actingAs($user); - - // $feature = factory(Feature::class)->create(['worker_id' => $user->id]); - - // $tasks = factory(Task::class, 5)->create(['feature_id' => $feature->id]); - // $this->assertEquals(5, $tasks->count()); - - // $this->visit('features/'.$feature->id); - // $this->see($tasks[1]->name); - // $this->see($tasks[1]->progress); - // $this->see($tasks[1]->description); - // $this->see($tasks[1]->route_name); - // $this->see($tasks[4]->name); - // $this->see($tasks[4]->progress); - // $this->see($tasks[4]->description); - // $this->see($tasks[4]->route_name); - // } } diff --git a/tests/Feature/Users/ManageUsersTest.php b/tests/Feature/Users/ManageUsersTest.php index 45cb10e..79383a3 100644 --- a/tests/Feature/Users/ManageUsersTest.php +++ b/tests/Feature/Users/ManageUsersTest.php @@ -49,7 +49,6 @@ class ManageUsersTest extends TestCase { $user = $this->adminUserSigningIn(); $user2 = factory(User::class)->create(); - $user2->assignRole('worker'); $this->visit(route('users.edit', $user2->id)); $this->type('Ganti nama User', 'name'); @@ -72,7 +71,6 @@ class ManageUsersTest extends TestCase { $user = $this->adminUserSigningIn(); $user2 = factory(User::class)->create(); - $user2->assignRole('worker'); $this->visit(route('users.edit', $user2->id)); diff --git a/tests/Unit/Models/UserTest.php b/tests/Unit/Models/UserTest.php index 83aab0c..0bf3880 100644 --- a/tests/Unit/Models/UserTest.php +++ b/tests/Unit/Models/UserTest.php @@ -19,47 +19,6 @@ class UserTest extends TestCase } /** @test */ - public function user_can_assigned_to_a_role() - { - $user = factory(User::class)->create(); - $user->assignRole('admin'); - - $this->assertTrue($user->hasRole('admin')); - } - - /** @test */ - public function user_has_many_roles() - { - $user = factory(User::class)->create(); - $user->assignRole('admin'); - $user->assignRole('worker'); - - $this->assertTrue($user->hasRoles(['admin', 'worker'])); - } - - /** @test */ - public function user_can_be_removed_from_a_role() - { - $user = factory(User::class)->create(); - $user->assignRole('admin'); - $user->assignRole('worker'); - - $this->assertTrue($user->hasRoles(['admin', 'worker'])); - - $user->removeRole('worker'); - $this->assertFalse($user->fresh()->hasRole('worker')); - } - - /** @test */ - public function user_can_queried_by_roles() - { - $user = factory(User::class)->create(); - $user->assignRole('worker'); - - $this->assertCount(1, User::orderBy('name')->hasRoles(['worker'])->get()); - } - - /** @test */ public function user_can_owns_one_agency() { $user = factory(User::class)->create();