Browse Source

Add edit comment policy

pull/12/head
Nafies Luthfi 7 years ago
parent
commit
0af115a542
  1. 30
      app/Policies/Projects/CommentPolicy.php
  2. 1
      app/Providers/AuthServiceProvider.php
  3. 29
      tests/Unit/Policies/CommentPolicyTest.php

30
app/Policies/Projects/CommentPolicy.php

@ -0,0 +1,30 @@
<?php
namespace App\Policies\Projects;
use App\Entities\Users\User;
use App\Entities\Projects\Comment;
use Illuminate\Auth\Access\HandlesAuthorization;
/**
* Comment model policy class.
*
* @author Nafies Luthfi <nafiesL@gmail.com>
*/
class CommentPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can update the comment.
*
* @param \App\Entities\Users\User $user
* @param \App\Entities\Projects\Comment $comment
* @return bool
*/
public function update(User $user, Comment $comment)
{
return $user->hasRole('admin')
|| ($user->hasRole('worker') && $comment->creator_id == $user->id);
}
}

1
app/Providers/AuthServiceProvider.php

@ -16,6 +16,7 @@ class AuthServiceProvider extends ServiceProvider
'App\Entities\Partners\Vendor' => 'App\Policies\Partners\VendorPolicy', 'App\Entities\Partners\Vendor' => 'App\Policies\Partners\VendorPolicy',
'App\Entities\Partners\Customer' => 'App\Policies\Partners\CustomerPolicy', 'App\Entities\Partners\Customer' => 'App\Policies\Partners\CustomerPolicy',
'App\Entities\Projects\Project' => 'App\Policies\Projects\ProjectPolicy', 'App\Entities\Projects\Project' => 'App\Policies\Projects\ProjectPolicy',
'App\Entities\Projects\Comment' => 'App\Policies\Projects\CommentPolicy',
'App\Entities\Projects\Job' => 'App\Policies\Projects\JobPolicy', 'App\Entities\Projects\Job' => 'App\Policies\Projects\JobPolicy',
'App\Entities\Projects\Task' => 'App\Policies\Projects\TaskPolicy', 'App\Entities\Projects\Task' => 'App\Policies\Projects\TaskPolicy',
'App\Entities\Payments\Payment' => 'App\Policies\PaymentPolicy', 'App\Entities\Payments\Payment' => 'App\Policies\PaymentPolicy',

29
tests/Unit/Policies/CommentPolicyTest.php

@ -0,0 +1,29 @@
<?php
namespace Tests\Unit\Policies;
use Tests\TestCase;
use App\Entities\Projects\Comment;
class CommentPolicyTest extends TestCase
{
/** @test */
public function admin_can_edit_any_comments()
{
$admin = $this->createUser('admin');
$comment = factory(Comment::class)->create();
$this->assertTrue($admin->can('update', $comment));
}
/** @test */
public function worker_can_only_edit_their_comments()
{
$admin = $this->createUser('admin');
$worker = $this->createUser('worker');
$comment = factory(Comment::class)->create(['creator_id' => $worker->id]);
$this->assertTrue($admin->can('update', $comment));
$this->assertTrue($worker->can('update', $comment));
}
}
Loading…
Cancel
Save