This repository has been archived by the owner on Jun 29, 2021. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* init * Adds Question create feature resolves #25 Removes unnecessary code in AccountsStoreController. * init * done * init * done Rebased on top of feature/issue-25 since we need the AuthServiceProvider to be enabled. * Fix Remove migration 'down' function, otherwise we'd need to add doctrine/dbal dependency. Fixed exception if no user is authenticated. * Update from upstream * Move link limit validation to Policy. Other minor tweaks * Added Link limit tests for trusted and Editor users * Update CHANGELOG.md * refactor(Links): pushed policy execution to after input validation and minor code style cleanup Co-authored-by: José Postiga <[email protected]>
- Loading branch information
Showing
15 changed files
with
276 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
domains/Accounts/Database/Migrations/2020_10_14_133643_add_account_type_to_users_table.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<?php | ||
|
||
use Illuminate\Database\Migrations\Migration; | ||
use Illuminate\Database\Schema\Blueprint; | ||
use Illuminate\Support\Facades\Schema; | ||
|
||
class AddAccountTypeToUsersTable extends Migration | ||
{ | ||
public function up(): void | ||
{ | ||
Schema::table('users', function (Blueprint $table) { | ||
$table->enum('account_type', ['user', 'editor', 'admin'])->default('user')->after('id'); | ||
}); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
<?php | ||
|
||
namespace Domains\Accounts\Enums; | ||
|
||
final class AccountTypeEnum | ||
{ | ||
public const USER = 'user'; | ||
public const EDITOR = 'editor'; | ||
public const ADMIN = 'admin'; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
<?php | ||
|
||
namespace Domains\Accounts\Tests\Unit; | ||
|
||
use Domains\Accounts\Database\Factories\UserFactory; | ||
use Domains\Accounts\Enums\AccountTypeEnum; | ||
use Domains\Accounts\Models\User; | ||
use Tests\TestCase; | ||
|
||
class HasRolesTraitTest extends TestCase | ||
{ | ||
private User $model; | ||
|
||
protected function setUp(): void | ||
{ | ||
parent::setUp(); | ||
|
||
$this->model = UserFactory::new()->unverified()->make(); | ||
} | ||
|
||
/** @test */ | ||
public function it_has_user_role(): void | ||
{ | ||
self::assertTrue($this->model->isOfRole(AccountTypeEnum::USER)); | ||
self::assertTrue($this->model->hasRole(AccountTypeEnum::USER)); | ||
|
||
self::assertFalse($this->model->isOfRole(AccountTypeEnum::EDITOR)); | ||
self::assertFalse($this->model->isOfRole(AccountTypeEnum::ADMIN)); | ||
self::assertFalse($this->model->hasRole(AccountTypeEnum::EDITOR)); | ||
self::assertFalse($this->model->hasRole(AccountTypeEnum::ADMIN)); | ||
} | ||
|
||
/** @test */ | ||
public function it_has_editor_role(): void | ||
{ | ||
$this->model = UserFactory::new()->unverified()->editor()->make(); | ||
|
||
self::assertTrue($this->model->isOfRole(AccountTypeEnum::EDITOR)); | ||
self::assertTrue($this->model->hasRole(AccountTypeEnum::EDITOR)); | ||
self::assertTrue($this->model->hasRole(AccountTypeEnum::USER)); | ||
|
||
self::assertFalse($this->model->isOfRole(AccountTypeEnum::USER)); | ||
self::assertFalse($this->model->isOfRole(AccountTypeEnum::ADMIN)); | ||
self::assertFalse($this->model->hasRole(AccountTypeEnum::ADMIN)); | ||
} | ||
|
||
/** @test */ | ||
public function it_has_admin_role(): void | ||
{ | ||
$this->model = UserFactory::new()->unverified()->admin()->make(); | ||
|
||
self::assertTrue($this->model->isOfRole(AccountTypeEnum::ADMIN)); | ||
self::assertTrue($this->model->hasRole(AccountTypeEnum::ADMIN)); | ||
self::assertTrue($this->model->hasRole(AccountTypeEnum::EDITOR)); | ||
self::assertTrue($this->model->hasRole(AccountTypeEnum::USER)); | ||
|
||
self::assertFalse($this->model->isOfRole(AccountTypeEnum::EDITOR)); | ||
self::assertFalse($this->model->isOfRole(AccountTypeEnum::USER)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
<?php | ||
|
||
namespace Domains\Accounts\Traits; | ||
|
||
use Domains\Accounts\Enums\AccountTypeEnum; | ||
|
||
trait HasRoles | ||
{ | ||
public function isOfRole(string $role): bool | ||
{ | ||
return $this->account_type === $role; | ||
} | ||
|
||
public function hasRole(string $role): bool | ||
{ | ||
$roles = []; | ||
switch ($this->account_type) { | ||
case AccountTypeEnum::ADMIN: | ||
$roles[] = AccountTypeEnum::ADMIN; | ||
case AccountTypeEnum::EDITOR: | ||
$roles[] = AccountTypeEnum::EDITOR; | ||
case AccountTypeEnum::USER: | ||
$roles[] = AccountTypeEnum::USER; | ||
} | ||
|
||
return in_array($role, $roles); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
|
||
namespace Domains\Links\Policies; | ||
|
||
use Domains\Accounts\Enums\AccountTypeEnum; | ||
use Domains\Accounts\Models\User; | ||
use Domains\Links\Models\Link; | ||
use Illuminate\Auth\Access\HandlesAuthorization; | ||
|
||
class LinkPolicy | ||
{ | ||
use HandlesAuthorization; | ||
|
||
public function create(?User $user, string $authorEmail) | ||
{ | ||
if ($user && ($user->isTrusted() || $user->hasRole(AccountTypeEnum::EDITOR))) { | ||
return true; | ||
} | ||
|
||
$pendingCount = Link::forAuthorWithEmail($authorEmail) | ||
->unapproved() | ||
->count(); | ||
|
||
return $pendingCount < config('links.max_unapproved_links'); | ||
} | ||
} |
Oops, something went wrong.