Skip to content

Commit 54895b9

Browse files
authored
Merge pull request #3 from laravel-enso/feature/roles
adds roles for allocatedTo
2 parents f294837 + 5deb231 commit 54895b9

File tree

8 files changed

+130
-21
lines changed

8 files changed

+130
-21
lines changed

config/tasks.php

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
return [
4+
/*
5+
|--------------------------------------------------------------------------
6+
| Roles
7+
|--------------------------------------------------------------------------
8+
| which roles can choose for allocated users
9+
| Values: ['*'] -> all roles, [ roles ] -> selected roles
10+
*/
11+
'roles' => ['*'],
12+
];

database/migrations/2020_10_27_102337_create_structure_for_tasks.php

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class CreateStructureForTasks extends Migration
1515
['name' => 'tasks.tableData', 'description' => 'Get table data for tasks', 'is_default' => false],
1616
['name' => 'tasks.exportExcel', 'description' => 'Export excel for tasks', 'is_default' => false],
1717
['name' => 'tasks.count', 'description' => 'Get number of pending tasks', 'is_default' => false],
18+
['name' => 'tasks.users', 'description' => 'Get user options for task allocation', 'is_default' => false],
1819
];
1920

2021
protected array $menu = [

routes/api.php

+23-11
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,36 @@
11
<?php
22

33
use Illuminate\Support\Facades\Route;
4+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Users;
5+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Count;
6+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Create;
7+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Destroy;
8+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Edit;
9+
use LaravelEnso\Tasks\Http\Controllers\Tasks\ExportExcel;
10+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Index;
11+
use LaravelEnso\Tasks\Http\Controllers\Tasks\InitTable;
12+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Store;
13+
use LaravelEnso\Tasks\Http\Controllers\Tasks\TableData;
14+
use LaravelEnso\Tasks\Http\Controllers\Tasks\Update;
415

516
Route::middleware(['api', 'auth', 'core'])
6-
->namespace('LaravelEnso\Tasks\Http\Controllers\Tasks')
717
->prefix('api/tasks')
818
->as('tasks.')
919
->group(function () {
10-
Route::get('create', 'Create')->name('create');
11-
Route::post('', 'Store')->name('store');
12-
Route::get('{task}/edit', 'Edit')->name('edit');
20+
Route::get('create', Create::class)->name('create');
21+
Route::post('', Store::class)->name('store');
22+
Route::get('{task}/edit', Edit::class)->name('edit');
1323

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

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

18-
Route::get('initTable', 'InitTable')->name('initTable');
19-
Route::get('tableData', 'TableData')->name('tableData');
20-
Route::get('exportExcel', 'ExportExcel')->name('exportExcel');
28+
Route::get('initTable', InitTable::class)->name('initTable');
29+
Route::get('tableData', TableData::class)->name('tableData');
30+
Route::get('exportExcel', ExportExcel::class)->name('exportExcel');
2131

22-
Route::get('count', 'Count')->name('count');
23-
Route::get('', 'Index')->name('index');
32+
Route::get('count', Count::class)->name('count');
33+
Route::get('', Index::class)->name('index');
34+
35+
Route::get('users', Users::class)->name('users');
2436
});

src/AppServiceProvider.php

+12-9
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,27 @@ public function boot()
2222
->observers();
2323
}
2424

25+
public function register()
26+
{
27+
//
28+
}
29+
2530
private function load(): self
2631
{
2732
$this->loadRoutesFrom(__DIR__.'/../routes/api.php');
33+
2834
$this->loadMigrationsFrom(__DIR__.'/../database/migrations');
2935

36+
$this->mergeConfigFrom(__DIR__.'/../config/tasks.php', 'enso.tasks');
37+
3038
return $this;
3139
}
3240

3341
private function publish(): self
3442
{
3543
$this->publishes([
36-
__DIR__.'/../config' => config_path('laravel-enso'),
37-
], 'tasks-config');
44+
__DIR__.'/../config' => config_path('enso'),
45+
], ['enso-config', 'tasks-config']);
3846

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

56-
public function relations(): self
64+
private function relations(): self
5765
{
5866
Methods::bind(User::class, [Tasks::class]);
5967

6068
return $this;
6169
}
6270

63-
public function observers()
71+
private function observers()
6472
{
6573
Model::observe(Observer::class);
6674
}
67-
68-
public function register()
69-
{
70-
//
71-
}
7275
}

src/Forms/Templates/task.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"meta": {
3030
"custom": true,
3131
"type": "select",
32-
"source": "administration.users.options",
32+
"source": "tasks.users",
3333
"label": "person.name"
3434
}
3535
}, {

src/Http/Controllers/Tasks/Users.php

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace LaravelEnso\Tasks\Http\Controllers\Tasks;
4+
5+
use Illuminate\Support\Facades\Config;
6+
use LaravelEnso\Core\Http\Controllers\Administration\User\Options as UserOptions;
7+
8+
class Users extends UserOptions
9+
{
10+
public function query()
11+
{
12+
$roles = Config::get('enso.tasks.roles');
13+
14+
return parent::query()
15+
->when($roles !== ['*'], fn ($query) => $query->whereIn('role_id', $roles));
16+
}
17+
}

src/Upgrades/Role.php

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace LaravelEnso\Tasks\Upgrades;
4+
5+
use LaravelEnso\Permissions\Models\Permission;
6+
use LaravelEnso\Upgrade\Contracts\MigratesStructure;
7+
use LaravelEnso\Upgrade\Traits\StructureMigration;
8+
9+
class Role implements MigratesStructure
10+
{
11+
use StructureMigration;
12+
13+
protected $permissions = [
14+
['name' => 'tasks.users', 'description' => 'Get user options for task allocation', 'is_default' => false],
15+
];
16+
17+
protected $roles;
18+
19+
public function __construct()
20+
{
21+
$this->roles = Permission::with('roles')
22+
->whereName('administration.users.options')
23+
->first()
24+
->roles
25+
->map(fn($role) => $role->name)
26+
->toArray();
27+
}
28+
}

tests/AllocateToRolesTest.php

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
use Illuminate\Foundation\Testing\RefreshDatabase;
4+
use Illuminate\Support\Facades\Config;
5+
use LaravelEnso\Core\Models\User;
6+
use Tests\TestCase;
7+
8+
class AllocateToRolesTest extends TestCase
9+
{
10+
use RefreshDatabase;
11+
12+
protected function setUp(): void
13+
{
14+
parent::setUp();
15+
16+
$this->seed();
17+
18+
$this->actingAs(User::first());
19+
}
20+
21+
/** @test */
22+
public function can_limit_roles()
23+
{
24+
Config::set('enso.tasks.roles', []);
25+
26+
$this->get(route('tasks.users'))->assertJson([]);
27+
}
28+
29+
/** @test */
30+
public function can_select_all_roles()
31+
{
32+
Config::set('enso.tasks.roles', ['*']);
33+
34+
$this->get(route('tasks.users'))->assertJsonCount(User::count());
35+
}
36+
}

0 commit comments

Comments
 (0)