Browse Source

Prevent user from deleted if user has job history

pull/6/head
Nafies Luthfi 8 years ago
parent
commit
1f03cad6a2
  1. 2
      app/Policies/UserPolicy.php
  2. 3
      resources/views/layouts/user.blade.php
  3. 4
      resources/views/users/delete.blade.php
  4. 14
      resources/views/users/edit.blade.php
  5. 5
      resources/views/users/show.blade.php
  6. 11
      tests/Unit/Policies/UserPolicyTest.php

2
app/Policies/UserPolicy.php

@ -64,6 +64,6 @@ class UserPolicy
*/ */
public function delete(User $user, Worker $worker) public function delete(User $user, Worker $worker)
{ {
return $this->update($user, $worker);
return $user->hasRole('admin') && $worker->jobs->isEmpty();
} }
} }

3
resources/views/layouts/user.blade.php

@ -7,8 +7,7 @@
@section('content') @section('content')
@include('users.partials.breadcrumb') @include('users.partials.breadcrumb')
<div class="pull-right" style="margin-top: -8px"> <div class="pull-right" style="margin-top: -8px">
{!! link_to_route('users.edit', trans('user.edit'), [$user], ['id' => 'edit-user-' . $user->id, 'class' => 'btn btn-warning']) !!}
{!! link_to_route('users.index', trans('user.back_to_index'), [], ['class' => 'btn btn-default']) !!}
@yield('action-buttons')
</div> </div>
@include('users.partials.nav-tabs') @include('users.partials.nav-tabs')
@yield('content-user') @yield('content-user')

4
resources/views/users/delete.blade.php

@ -1,8 +1,8 @@
@extends('layouts.dashboard')
@extends('layouts.user')
@section('title', trans('user.delete')) @section('title', trans('user.delete'))
@section('content-dashboard')
@section('content-user')
<div class="row"> <div class="row">
<div class="col-md-4 col-lg-offset-3"> <div class="col-md-4 col-lg-offset-3">
<div class="panel panel-danger"> <div class="panel panel-danger">

14
resources/views/users/edit.blade.php

@ -3,11 +3,16 @@
@section('subtitle', trans('user.edit')) @section('subtitle', trans('user.edit'))
@section('action-buttons')
{!! link_to_route('users.show', trans('user.back_to_show'), [$user->id], ['class' => 'btn btn-default']) !!}
@endsection
@section('content-user') @section('content-user')
{!! Form::model($user, ['route'=>['users.update', $user->id], 'method' => 'patch', 'autocomplete' => 'off']) !!} {!! Form::model($user, ['route'=>['users.update', $user->id], 'method' => 'patch', 'autocomplete' => 'off']) !!}
<div class="row"> <div class="row">
<div class="col-md-6">
<div class="col-md-6 col-md-offset-3">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">@yield('subtitle')</h3></div>
<div class="panel-body"> <div class="panel-body">
{!! FormField::text('name', ['label' => trans('app.name')]) !!} {!! FormField::text('name', ['label' => trans('app.name')]) !!}
{!! FormField::email('email', ['label' => trans('user.email')]) !!} {!! FormField::email('email', ['label' => trans('user.email')]) !!}
@ -26,10 +31,11 @@
{!! FormField::radios('lang', $langList, ['label' => trans('lang.lang')]) !!} {!! FormField::radios('lang', $langList, ['label' => trans('lang.lang')]) !!}
</div> </div>
<div class="panel-footer"> <div class="panel-footer">
{!! Form::submit(trans('user.update'), ['class'=>'btn btn-warning']) !!}
{!! link_to_route('users.show', trans('user.back_to_show'), [$user->id], ['class' => 'btn btn-info']) !!}
{!! link_to_route('users.index', trans('user.back_to_index'), [], ['class' => 'btn btn-default']) !!}
{!! Form::submit(trans('user.update'), ['class'=>'btn btn-success']) !!}
{!! link_to_route('users.show', trans('app.cancel'), [$user->id], ['class' => 'btn btn-default']) !!}
@can('delete', $user)
{!! link_to_route('users.delete', trans('app.delete'), [$user->id], ['class'=>'btn btn-danger pull-right']) !!} {!! link_to_route('users.delete', trans('app.delete'), [$user->id], ['class'=>'btn btn-danger pull-right']) !!}
@endcan
</div> </div>
</div> </div>
</div> </div>

5
resources/views/users/show.blade.php

@ -1,5 +1,10 @@
@extends('layouts.user') @extends('layouts.user')
@section('action-buttons')
{!! link_to_route('users.edit', trans('user.edit'), [$user], ['id' => 'edit-user-' . $user->id, 'class' => 'btn btn-warning']) !!}
{!! link_to_route('users.index', trans('user.back_to_index'), [], ['class' => 'btn btn-default']) !!}
@endsection
@section('content-user') @section('content-user')
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">

11
tests/Unit/Policies/UserPolicyTest.php

@ -2,6 +2,7 @@
namespace Tests\Unit\Policies; namespace Tests\Unit\Policies;
use App\Entities\Projects\Job;
use App\Entities\Users\User; use App\Entities\Users\User;
use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseMigrations;
use Tests\TestCase as TestCase; use Tests\TestCase as TestCase;
@ -44,4 +45,14 @@ class UserPolicyTest extends TestCase
$this->assertTrue($admin->can('delete', $user)); $this->assertTrue($admin->can('delete', $user));
} }
/** @test */
public function admin_cannot_delete_a_user_if_user_has_been_involved_on_any_project()
{
$admin = $this->adminUserSigningIn();
$user = factory(User::class)->create();
$job = factory(Job::class)->create(['worker_id' => $user->id]);
$this->assertFalse($admin->can('delete', $user));
}
} }
Loading…
Cancel
Save