Skip to content

Commit

Permalink
Merge pull request #3 from laravel-enso/feature/roles
Browse files Browse the repository at this point in the history
adds roles for allocatedTo
  • Loading branch information
aocneanu committed Nov 26, 2020
2 parents f294837 + 5deb231 commit 54895b9
Show file tree
Hide file tree
Showing 8 changed files with 130 additions and 21 deletions.
12 changes: 12 additions & 0 deletions config/tasks.php
@@ -0,0 +1,12 @@
<?php

return [
/*
|--------------------------------------------------------------------------
| Roles
|--------------------------------------------------------------------------
| which roles can choose for allocated users
| Values: ['*'] -> all roles, [ roles ] -> selected roles
*/
'roles' => ['*'],
];
Expand Up @@ -15,6 +15,7 @@ class CreateStructureForTasks extends Migration
['name' => 'tasks.tableData', 'description' => 'Get table data for tasks', 'is_default' => false],
['name' => 'tasks.exportExcel', 'description' => 'Export excel for tasks', 'is_default' => false],
['name' => 'tasks.count', 'description' => 'Get number of pending tasks', 'is_default' => false],
['name' => 'tasks.users', 'description' => 'Get user options for task allocation', 'is_default' => false],
];

protected array $menu = [
Expand Down
34 changes: 23 additions & 11 deletions routes/api.php
@@ -1,24 +1,36 @@
<?php

use Illuminate\Support\Facades\Route;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Users;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Count;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Create;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Destroy;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Edit;
use LaravelEnso\Tasks\Http\Controllers\Tasks\ExportExcel;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Index;
use LaravelEnso\Tasks\Http\Controllers\Tasks\InitTable;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Store;
use LaravelEnso\Tasks\Http\Controllers\Tasks\TableData;
use LaravelEnso\Tasks\Http\Controllers\Tasks\Update;

Route::middleware(['api', 'auth', 'core'])
->namespace('LaravelEnso\Tasks\Http\Controllers\Tasks')
->prefix('api/tasks')
->as('tasks.')
->group(function () {
Route::get('create', 'Create')->name('create');
Route::post('', 'Store')->name('store');
Route::get('{task}/edit', 'Edit')->name('edit');
Route::get('create', Create::class)->name('create');
Route::post('', Store::class)->name('store');
Route::get('{task}/edit', Edit::class)->name('edit');

Route::patch('{task}', 'Update')->name('update');
Route::patch('{task}', Update::class)->name('update');

Route::delete('{task}', 'Destroy')->name('destroy');
Route::delete('{task}', Destroy::class)->name('destroy');

Route::get('initTable', 'InitTable')->name('initTable');
Route::get('tableData', 'TableData')->name('tableData');
Route::get('exportExcel', 'ExportExcel')->name('exportExcel');
Route::get('initTable', InitTable::class)->name('initTable');
Route::get('tableData', TableData::class)->name('tableData');
Route::get('exportExcel', ExportExcel::class)->name('exportExcel');

Route::get('count', 'Count')->name('count');
Route::get('', 'Index')->name('index');
Route::get('count', Count::class)->name('count');
Route::get('', Index::class)->name('index');

Route::get('users', Users::class)->name('users');
});
21 changes: 12 additions & 9 deletions src/AppServiceProvider.php
Expand Up @@ -22,19 +22,27 @@ public function boot()
->observers();
}

public function register()
{
//
}

private function load(): self
{
$this->loadRoutesFrom(__DIR__.'/../routes/api.php');

$this->loadMigrationsFrom(__DIR__.'/../database/migrations');

$this->mergeConfigFrom(__DIR__.'/../config/tasks.php', 'enso.tasks');

return $this;
}

private function publish(): self
{
$this->publishes([
__DIR__.'/../config' => config_path('laravel-enso'),
], 'tasks-config');
__DIR__.'/../config' => config_path('enso'),
], ['enso-config', 'tasks-config']);

$this->publishes([
__DIR__.'/../client/src/js' => base_path('client/src/js'),
Expand All @@ -53,20 +61,15 @@ private function command(): self
return $this;
}

public function relations(): self
private function relations(): self
{
Methods::bind(User::class, [Tasks::class]);

return $this;
}

public function observers()
private function observers()
{
Model::observe(Observer::class);
}

public function register()
{
//
}
}
2 changes: 1 addition & 1 deletion src/Forms/Templates/task.json
Expand Up @@ -29,7 +29,7 @@
"meta": {
"custom": true,
"type": "select",
"source": "administration.users.options",
"source": "tasks.users",
"label": "person.name"
}
}, {
Expand Down
17 changes: 17 additions & 0 deletions src/Http/Controllers/Tasks/Users.php
@@ -0,0 +1,17 @@
<?php

namespace LaravelEnso\Tasks\Http\Controllers\Tasks;

use Illuminate\Support\Facades\Config;
use LaravelEnso\Core\Http\Controllers\Administration\User\Options as UserOptions;

class Users extends UserOptions
{
public function query()
{
$roles = Config::get('enso.tasks.roles');

return parent::query()
->when($roles !== ['*'], fn ($query) => $query->whereIn('role_id', $roles));
}
}
28 changes: 28 additions & 0 deletions src/Upgrades/Role.php
@@ -0,0 +1,28 @@
<?php

namespace LaravelEnso\Tasks\Upgrades;

use LaravelEnso\Permissions\Models\Permission;
use LaravelEnso\Upgrade\Contracts\MigratesStructure;
use LaravelEnso\Upgrade\Traits\StructureMigration;

class Role implements MigratesStructure
{
use StructureMigration;

protected $permissions = [
['name' => 'tasks.users', 'description' => 'Get user options for task allocation', 'is_default' => false],
];

protected $roles;

public function __construct()
{
$this->roles = Permission::with('roles')
->whereName('administration.users.options')
->first()
->roles
->map(fn($role) => $role->name)
->toArray();
}
}
36 changes: 36 additions & 0 deletions tests/AllocateToRolesTest.php
@@ -0,0 +1,36 @@
<?php

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Config;
use LaravelEnso\Core\Models\User;
use Tests\TestCase;

class AllocateToRolesTest extends TestCase
{
use RefreshDatabase;

protected function setUp(): void
{
parent::setUp();

$this->seed();

$this->actingAs(User::first());
}

/** @test */
public function can_limit_roles()
{
Config::set('enso.tasks.roles', []);

$this->get(route('tasks.users'))->assertJson([]);
}

/** @test */
public function can_select_all_roles()
{
Config::set('enso.tasks.roles', ['*']);

$this->get(route('tasks.users'))->assertJsonCount(User::count());
}
}

0 comments on commit 54895b9

Please sign in to comment.