user and role
WMS API/ERP-API/pipeline/head There was a failure building this commit
Details
WMS API/ERP-API/pipeline/head There was a failure building this commit
Details
This commit is contained in:
parent
2254c67eff
commit
3ad3a4d00f
|
|
@ -0,0 +1,75 @@
|
||||||
|
@servers(['prod' => 'ubuntu@172.26.12.217', 'dev' => 'ubuntu@smgdev.top'])
|
||||||
|
|
||||||
|
@setup
|
||||||
|
$repository = 'git@172.26.1.255:SMG_DEV/ERP-API.git';
|
||||||
|
$releases_dir = '/var/www/erp-api/releases';
|
||||||
|
$app_dir = '/var/www/erp-api';
|
||||||
|
$release = date('YmdHis');
|
||||||
|
$branch = 'production';
|
||||||
|
$new_release_dir = $releases_dir .'/'. $release;
|
||||||
|
@endsetup
|
||||||
|
|
||||||
|
@task('clone_repository')
|
||||||
|
echo 'Cloning repository'
|
||||||
|
[ -d {{ $releases_dir }} ] || mkdir {{ $releases_dir }}
|
||||||
|
git clone --depth 1 --single-branch --branch {{ $branch }} {{ $repository }} {{ $new_release_dir }}
|
||||||
|
cd {{ $new_release_dir }}
|
||||||
|
@endtask
|
||||||
|
|
||||||
|
@task('run_composer')
|
||||||
|
echo "Starting deployment ({{ $release }})"
|
||||||
|
cd {{ $new_release_dir }}
|
||||||
|
composer install --prefer-dist --no-scripts -q -o
|
||||||
|
@endtask
|
||||||
|
|
||||||
|
@task('update_symlinks')
|
||||||
|
echo "Linking storage directory"
|
||||||
|
rm -rf {{ $new_release_dir }}/storage
|
||||||
|
ln -nfs {{ $app_dir }}/storage {{ $new_release_dir }}/storage
|
||||||
|
|
||||||
|
echo 'Linking .env file'
|
||||||
|
ln -nfs {{ $app_dir }}/.env {{ $new_release_dir }}/.env
|
||||||
|
|
||||||
|
echo 'Linking current release'
|
||||||
|
ln -nfs {{ $new_release_dir }} {{ $app_dir }}/current
|
||||||
|
@endtask
|
||||||
|
|
||||||
|
@task('setup_laravel')
|
||||||
|
cd {{ $app_dir }}/current
|
||||||
|
php artisan migrate --force
|
||||||
|
php artisan storage:link
|
||||||
|
php artisan db:seed --class PermissionSeeder --force
|
||||||
|
@endtask
|
||||||
|
|
||||||
|
@task('clean_old_releases')
|
||||||
|
# This lists our releases by modification time and delete all but the 3 most recent.
|
||||||
|
purging=$(ls -dt {{ $releases_dir }}/* | tail -n +5);
|
||||||
|
|
||||||
|
if [ "{{ $releases_dir }}" != "" ]; then
|
||||||
|
|
||||||
|
if [ "$purging" != "" ]; then
|
||||||
|
echo Purging old releases: $purging;
|
||||||
|
rm -rf $purging;
|
||||||
|
else
|
||||||
|
echo "No releases found for purging at this time";
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
@endtask
|
||||||
|
|
||||||
|
@story('deploy',["on" => "prod"])
|
||||||
|
clone_repository
|
||||||
|
run_composer
|
||||||
|
update_symlinks
|
||||||
|
setup_laravel
|
||||||
|
clean_old_releases
|
||||||
|
@endstory
|
||||||
|
|
||||||
|
|
||||||
|
@story('deploy-dev',["on" => "dev"])
|
||||||
|
clone_repository
|
||||||
|
run_composer
|
||||||
|
update_symlinks
|
||||||
|
setup_laravel
|
||||||
|
clean_old_releases
|
||||||
|
@endstory
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
pipeline {
|
||||||
|
agent any
|
||||||
|
stages
|
||||||
|
{
|
||||||
|
stage("Deploy Dev"){
|
||||||
|
when {
|
||||||
|
branch 'development'
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
sshagent(credentials: ['dev-id_rsa']) {
|
||||||
|
sh "composer install"
|
||||||
|
sh "./vendor/bin/envoy run deploy-dev"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage("Deploy Prod"){
|
||||||
|
when {
|
||||||
|
branch 'production'
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
sshagent(credentials: ['dev-id_rsa']) {
|
||||||
|
sh "composer install"
|
||||||
|
sh "./vendor/bin/envoy run deploy"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth\Role;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\Role\DeleteRequest;
|
||||||
|
use App\Http\Resources\Auth\Role\ListResource as RowResource;
|
||||||
|
use App\Repositories\Auth\UserRepository;
|
||||||
|
use App\Models\Role;
|
||||||
|
|
||||||
|
class DeleteController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*/
|
||||||
|
public function __invoke(DeleteRequest $request, Role $user, UserRepository $repository)
|
||||||
|
{
|
||||||
|
$data = $repository->delete($user);
|
||||||
|
return response()->json([
|
||||||
|
"success" => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth\Role;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\Role\ListRequest;
|
||||||
|
use App\Http\Resources\Auth\Role\ListResource;
|
||||||
|
use App\Repositories\Auth\RoleRepository;
|
||||||
|
|
||||||
|
class ListController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*/
|
||||||
|
public function __invoke(ListRequest $request, RoleRepository $repository)
|
||||||
|
{
|
||||||
|
$params = $request->validated();
|
||||||
|
$data = $repository->list($params);
|
||||||
|
return ListResource::collection($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth\Role;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\Role\StoreRequest;
|
||||||
|
use App\Http\Resources\Auth\Role\ListResource as RowResource;
|
||||||
|
use App\Repositories\Auth\UserRepository;
|
||||||
|
|
||||||
|
class StoreController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*/
|
||||||
|
public function __invoke(StoreRequest $request, UserRepository $repository)
|
||||||
|
{
|
||||||
|
$params = $request->validated();
|
||||||
|
$data = $repository->create($params);
|
||||||
|
return RowResource::make($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth\Role;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\Role\UpdateRequest;
|
||||||
|
use App\Http\Resources\Auth\Role\ListResource as RowResource;
|
||||||
|
use App\Repositories\Auth\UserRepository;
|
||||||
|
use App\Models\Role;
|
||||||
|
|
||||||
|
class UpdateController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*/
|
||||||
|
public function __invoke(UpdateRequest $request, Role $user, UserRepository $repository)
|
||||||
|
{
|
||||||
|
$params = $request->validated();
|
||||||
|
$data = $repository->update($user, $params);
|
||||||
|
return RowResource::make($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth\User;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\User\DeleteRequest;
|
||||||
|
use App\Http\Resources\Auth\User\ListResource as RowResource;
|
||||||
|
use App\Repositories\Auth\UserRepository;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class DeleteController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*/
|
||||||
|
public function __invoke(DeleteRequest $request, User $user, UserRepository $repository)
|
||||||
|
{
|
||||||
|
$data = $repository->delete($user);
|
||||||
|
return response()->json([
|
||||||
|
"success" => true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,14 +4,19 @@ namespace App\Http\Controllers\Auth\User;
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\User\ListRequest;
|
||||||
|
use App\Http\Resources\Auth\User\ListResource;
|
||||||
|
use App\Repositories\Auth\UserRepository;
|
||||||
|
|
||||||
class ListController extends Controller
|
class ListController extends Controller
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Handle the incoming request.
|
* Handle the incoming request.
|
||||||
*/
|
*/
|
||||||
public function __invoke(Request $request)
|
public function __invoke(ListRequest $request, UserRepository $repository)
|
||||||
{
|
{
|
||||||
//
|
$params = $request->validated();
|
||||||
|
$data = $repository->list($params);
|
||||||
|
return ListResource::collection($data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth\User;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\User\StoreRequest;
|
||||||
|
use App\Http\Resources\Auth\User\ListResource as RowResource;
|
||||||
|
use App\Repositories\Auth\UserRepository;
|
||||||
|
|
||||||
|
class StoreController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*/
|
||||||
|
public function __invoke(StoreRequest $request, UserRepository $repository)
|
||||||
|
{
|
||||||
|
$params = $request->validated();
|
||||||
|
$data = $repository->create($params);
|
||||||
|
return RowResource::make($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth\User;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Requests\Auth\User\UpdateRequest;
|
||||||
|
use App\Http\Resources\Auth\User\ListResource as RowResource;
|
||||||
|
use App\Repositories\Auth\UserRepository;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class UpdateController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*/
|
||||||
|
public function __invoke(UpdateRequest $request, User $user, UserRepository $repository)
|
||||||
|
{
|
||||||
|
$params = $request->validated();
|
||||||
|
$data = $repository->update($user, $params);
|
||||||
|
return RowResource::make($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class DeleteRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return auth()->user()->checkPermission("auth.role:delete");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class ListRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return auth()->user()->checkPermission("auth.role:read");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'limit' => 'nullable',
|
||||||
|
'offset' => 'nullable',
|
||||||
|
'search' => 'nullable',
|
||||||
|
|
||||||
|
'filter' => 'nullable|array',
|
||||||
|
'filter.*.column' => 'required|in:name,email',
|
||||||
|
'filter.*.operator' => 'nullable|in:eq,in',
|
||||||
|
'filter.*.query' => 'required',
|
||||||
|
|
||||||
|
'sort' => 'nullable|array',
|
||||||
|
'sort.column' => 'nullable|in:name,email',
|
||||||
|
'sort.dir' => 'nullable',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class StoreRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return auth()->user()->checkPermission("auth.user:create");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string',
|
||||||
|
'email' => 'required|string',
|
||||||
|
'role_ids' => 'nullable|array',
|
||||||
|
'role_ids.*' => 'nullable|integer'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class UpdateRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return auth()->user()->checkPermission("auth.role:update");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string',
|
||||||
|
'email' => 'required|string',
|
||||||
|
'role_ids' => 'nullable|array',
|
||||||
|
'role_ids.*' => 'nullable|integer'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Auth\User;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class DeleteRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return auth()->user()->checkPermission("auth.user:delete");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -11,10 +11,7 @@ class ListRequest extends FormRequest
|
||||||
*/
|
*/
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
$user = auth()->user();
|
return auth()->user()->checkPermission("auth.user:read");
|
||||||
$user->load("roles");
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -25,7 +22,18 @@ class ListRequest extends FormRequest
|
||||||
public function rules(): array
|
public function rules(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
//
|
'limit' => 'nullable',
|
||||||
|
'offset' => 'nullable',
|
||||||
|
'search' => 'nullable',
|
||||||
|
|
||||||
|
'filter' => 'nullable|array',
|
||||||
|
'filter.*.column' => 'required|in:name,email',
|
||||||
|
'filter.*.operator' => 'nullable|in:eq,in',
|
||||||
|
'filter.*.query' => 'required',
|
||||||
|
|
||||||
|
'sort' => 'nullable|array',
|
||||||
|
'sort.column' => 'nullable|in:name,email',
|
||||||
|
'sort.dir' => 'nullable',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Auth\User;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class StoreRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return auth()->user()->checkPermission("auth.user:create");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string',
|
||||||
|
'email' => 'required|string',
|
||||||
|
'role_ids' => 'nullable|array',
|
||||||
|
'role_ids.*' => 'nullable|integer'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\Auth\User;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class UpdateRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*/
|
||||||
|
public function authorize(): bool
|
||||||
|
{
|
||||||
|
return auth()->user()->checkPermission("auth.user:update");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||||
|
*/
|
||||||
|
public function rules(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string',
|
||||||
|
'email' => 'required|string',
|
||||||
|
'role_ids' => 'nullable|array',
|
||||||
|
'role_ids.*' => 'nullable|integer'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class ListResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id" => $this->id,
|
||||||
|
"name" => $this->name,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Resources\Auth\User;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
use App\Http\Resources\Auth\Role\ListResource as RoleResource;
|
||||||
|
|
||||||
|
class ListResource extends JsonResource
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Transform the resource into an array.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function toArray(Request $request): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
"id" => $this->id,
|
||||||
|
"name" => $this->name,
|
||||||
|
"email" => $this->email,
|
||||||
|
"roles" => RoleResource::collection($this->roles)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,6 +10,6 @@ class Role extends Model
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
public function permissions(){
|
public function permissions(){
|
||||||
return $this->hasMany(Permission::class);
|
return $this->belongsToMany(Permission::class,"role_permission");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Laravel\Sanctum\HasApiTokens;
|
use Laravel\Sanctum\HasApiTokens;
|
||||||
|
use Cache;
|
||||||
|
|
||||||
class User extends Authenticatable
|
class User extends Authenticatable
|
||||||
{
|
{
|
||||||
|
|
@ -44,6 +45,23 @@ class User extends Authenticatable
|
||||||
];
|
];
|
||||||
|
|
||||||
public function roles(){
|
public function roles(){
|
||||||
return $this->hasMany(Role::class)->with("permissions");
|
return $this->belongsToMany(Role::class,'user_role')->with("permissions");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPermission(){
|
||||||
|
$user = $this;
|
||||||
|
return Cache::rememberForever("permission_".$this->id, function() use ($user){
|
||||||
|
return $user->roles->flatMap(function($role){
|
||||||
|
return $role->permissions->map(function($permission){
|
||||||
|
return $permission->code;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function checkPermission($code){
|
||||||
|
$permissions = $this->getPermission();
|
||||||
|
$code_arr = explode(":",$code);
|
||||||
|
return $permissions->contains($code) || $permissions->contains($code_arr[0].":*");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Repositories\Auth;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
|
||||||
|
class RoleRepository
|
||||||
|
{
|
||||||
|
|
||||||
|
public function list($params){
|
||||||
|
|
||||||
|
$limit = @$params["limit"] ?? 10;
|
||||||
|
$offset = @$params["offset"] ?? 0;
|
||||||
|
$sortColumn = @$params["sort"]["column"] ?? "id";
|
||||||
|
$sortDir = @$params["sort"]["dir"] ?? "desc";
|
||||||
|
|
||||||
|
return Role::skip($offset)
|
||||||
|
->orderBy($sortColumn, $sortDir)
|
||||||
|
|
||||||
|
->when(@$params["filter"], function ($query) use ($params) {
|
||||||
|
foreach ($params["filter"] as $filter) {
|
||||||
|
$query->where($filter["column"], $filter["query"]);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
->paginate($limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create($params){
|
||||||
|
|
||||||
|
$params["password"] = "-";
|
||||||
|
$model = Role::create($params);
|
||||||
|
if (@$params["role_ids"]){
|
||||||
|
$model->roles()->sync($params["role_ids"]);
|
||||||
|
}
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update($model, $params){
|
||||||
|
|
||||||
|
$model->update($params);
|
||||||
|
if (@$params["role_ids"]){
|
||||||
|
$model->roles()->sync($params["role_ids"]);
|
||||||
|
}
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete($model){
|
||||||
|
|
||||||
|
$model->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Repositories\Auth;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class UserRepository
|
||||||
|
{
|
||||||
|
|
||||||
|
public function list($params){
|
||||||
|
|
||||||
|
$limit = @$params["limit"] ?? 10;
|
||||||
|
$offset = @$params["offset"] ?? 0;
|
||||||
|
$sortColumn = @$params["sort"]["column"] ?? "id";
|
||||||
|
$sortDir = @$params["sort"]["dir"] ?? "desc";
|
||||||
|
|
||||||
|
return User::skip($offset)
|
||||||
|
->orderBy($sortColumn, $sortDir)
|
||||||
|
|
||||||
|
->when(@$params["filter"], function ($query) use ($params) {
|
||||||
|
foreach ($params["filter"] as $filter) {
|
||||||
|
$query->where($filter["column"], $filter["query"]);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
->paginate($limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create($params){
|
||||||
|
|
||||||
|
$params["password"] = "-";
|
||||||
|
$user = User::create($params);
|
||||||
|
if (@$params["role_ids"]){
|
||||||
|
$user->roles()->sync($params["role_ids"]);
|
||||||
|
}
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update($user, $params){
|
||||||
|
|
||||||
|
$user->update($params);
|
||||||
|
if (@$params["role_ids"]){
|
||||||
|
$user->roles()->sync($params["role_ids"]);
|
||||||
|
}
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete($user){
|
||||||
|
|
||||||
|
$user->delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database\Factories;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Role>
|
||||||
|
*/
|
||||||
|
class RoleFactory extends Factory
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Define the model's default state.
|
||||||
|
*
|
||||||
|
* @return array<string, mixed>
|
||||||
|
*/
|
||||||
|
public function definition(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => fake()->name(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ namespace Database\Seeders;
|
||||||
|
|
||||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||||
use Illuminate\Database\Seeder;
|
use Illuminate\Database\Seeder;
|
||||||
|
use DB;
|
||||||
|
|
||||||
class PermissionSeeder extends Seeder
|
class PermissionSeeder extends Seeder
|
||||||
{
|
{
|
||||||
|
|
@ -13,6 +14,21 @@ class PermissionSeeder extends Seeder
|
||||||
public function run(): void
|
public function run(): void
|
||||||
{
|
{
|
||||||
$permissions = file_get_contents(__DIR__ . "/permissions.csv");
|
$permissions = file_get_contents(__DIR__ . "/permissions.csv");
|
||||||
|
$permissions = explode("\n", $permissions);
|
||||||
|
$data = [];
|
||||||
|
foreach($permissions as $permission){
|
||||||
|
if ($permission == "")
|
||||||
|
continue;
|
||||||
|
$row = explode(",", $permission);
|
||||||
|
$data[] = [
|
||||||
|
"module" => $row[0],
|
||||||
|
"feature" => $row[1],
|
||||||
|
"action" => $row[2],
|
||||||
|
"code" => $row[3],
|
||||||
|
"name" => $row[4]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
DB::table("permissions")->insertOrIgnore($data);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,10 @@
|
||||||
Auth,User,*,auth.user.*,All operation data user
|
Auth,User,*,auth.user:*,All operation data user
|
||||||
Auth,User,*,auth.user.read,Show list data user
|
Auth,User,*,auth.user:read,Show list data user
|
||||||
Auth,User,*,auth.user.create,Create data user
|
Auth,User,*,auth.user:create,Create data user
|
||||||
Auth,User,*,auth.user.update,Update data user
|
Auth,User,*,auth.user:update,Update data user
|
||||||
Auth,User,*,auth.user.delete,Delete data user
|
Auth,User,*,auth.user:delete,Delete data user
|
||||||
|
Auth,Role,*,auth.role:*,All operation data role
|
||||||
|
Auth,Role,*,auth.role:read,Show list data role
|
||||||
|
Auth,Role,*,auth.role:create,Create data role
|
||||||
|
Auth,Role,*,auth.role:update,Update data role
|
||||||
|
Auth,Role,*,auth.role:delete,Delete data role
|
||||||
|
|
|
||||||
|
|
|
@ -9,4 +9,15 @@ Route::get('current', 'CurrentController')->middleware("auth:sanctum");
|
||||||
|
|
||||||
Route::group(["namespace" => "User", "prefix" => "user", "middleware" => "auth:sanctum"], function () {
|
Route::group(["namespace" => "User", "prefix" => "user", "middleware" => "auth:sanctum"], function () {
|
||||||
Route::get('/', 'ListController')->middleware("auth:sanctum");
|
Route::get('/', 'ListController')->middleware("auth:sanctum");
|
||||||
|
Route::post('/', 'StoreController')->middleware("auth:sanctum");
|
||||||
|
Route::post('/{user}', 'UpdateController')->middleware("auth:sanctum");
|
||||||
|
Route::post('/{user}/delete', 'DeleteController')->middleware("auth:sanctum");
|
||||||
|
});
|
||||||
|
|
||||||
|
Route::group(["namespace" => "Role", "prefix" => "role", "middleware" => "auth:sanctum"], function () {
|
||||||
|
|
||||||
|
Route::get('/', 'ListController')->middleware("auth:sanctum");
|
||||||
|
Route::post('/', 'StoreController')->middleware("auth:sanctum");
|
||||||
|
Route::post('/{role}', 'UpdateController')->middleware("auth:sanctum");
|
||||||
|
Route::post('/{role}/delete', 'DeleteController')->middleware("auth:sanctum");
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
|
class DeleteTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:delete")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$data = User::factory()->create();
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/'.$data->id.'/delete');
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
|
class ListTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.role:read")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$response = $this->get('/auth/role/');
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
[
|
||||||
|
"id" => $role->id,
|
||||||
|
"name" => $role->name
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
|
class StoreTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:create")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/',[
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com"
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(201);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com"
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_with_roles_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:create")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
$role2 = Role::factory()->create();
|
||||||
|
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/',[
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com",
|
||||||
|
"role_ids" => [$role->id, $role2->id]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(201);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com",
|
||||||
|
"roles" => [
|
||||||
|
[
|
||||||
|
"id" => $role->id
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => $role2->id
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Auth\Role;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
|
class UpdateTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:update")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$data = User::factory()->create();
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/'.$data->id,[
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com"
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com"
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_with_roles_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:update")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$data = User::factory()->create();
|
||||||
|
$role2 = Role::factory()->create();
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/'.$data->id,[
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com",
|
||||||
|
"role_ids" => [
|
||||||
|
$role->id, $role2->id
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com",
|
||||||
|
"roles" => [
|
||||||
|
[
|
||||||
|
"id" => $role->id
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => $role2->id
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Auth\User;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
|
class DeleteTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:delete")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$data = User::factory()->create();
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/'.$data->id.'/delete');
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -12,18 +12,42 @@ use App\Models\Permission;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use Laravel\Sanctum\Sanctum;
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
class ListTest extends TestCase
|
class ListTest extends TestCase
|
||||||
{
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A basic feature test example.
|
* A basic feature test example.
|
||||||
*/
|
*/
|
||||||
public function test_success(): void
|
public function test_success(): void
|
||||||
{
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:read")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
$user = User::factory()->create();
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
Sanctum::actingAs($user);
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
$response = $this->get('/auth/user/');
|
$response = $this->get('/auth/user/');
|
||||||
|
|
||||||
$response->assertStatus(200);
|
$response->assertStatus(200);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
[
|
||||||
|
"id" => $user->id,
|
||||||
|
"name" => $user->name,
|
||||||
|
"email" => $user->email,
|
||||||
|
"roles" => [
|
||||||
|
[
|
||||||
|
"id" => $role->id,
|
||||||
|
"name" => $role->name
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,87 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Auth\User;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
|
class StoreTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:create")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/',[
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com"
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(201);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com"
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_with_roles_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:create")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
$role2 = Role::factory()->create();
|
||||||
|
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/',[
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com",
|
||||||
|
"role_ids" => [$role->id, $role2->id]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(201);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "new user",
|
||||||
|
"email" => "user@gmail.com",
|
||||||
|
"roles" => [
|
||||||
|
[
|
||||||
|
"id" => $role->id
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => $role2->id
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Tests\Feature\Auth\User;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
|
use Tests\TestCase;
|
||||||
|
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\Permission;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Laravel\Sanctum\Sanctum;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||||
|
|
||||||
|
class UpdateTest extends TestCase
|
||||||
|
{
|
||||||
|
use DatabaseTransactions;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:update")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$data = User::factory()->create();
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/'.$data->id,[
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com"
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com"
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A basic feature test example.
|
||||||
|
*/
|
||||||
|
public function test_with_roles_success(): void
|
||||||
|
{
|
||||||
|
$permission = Permission::where("code","auth.user:update")->first();
|
||||||
|
$role = Role::factory()->create();
|
||||||
|
$role->permissions()->attach($permission->id);
|
||||||
|
$user = User::factory()->create();
|
||||||
|
$user->roles()->attach($role->id);
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$data = User::factory()->create();
|
||||||
|
$role2 = Role::factory()->create();
|
||||||
|
|
||||||
|
$response = $this->post('/auth/user/'.$data->id,[
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com",
|
||||||
|
"role_ids" => [
|
||||||
|
$role->id, $role2->id
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response->assertStatus(200);
|
||||||
|
$response->assertJson([
|
||||||
|
"data" => [
|
||||||
|
"name" => "update user",
|
||||||
|
"email" => "user_update@gmail.com",
|
||||||
|
"roles" => [
|
||||||
|
[
|
||||||
|
"id" => $role->id
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"id" => $role2->id
|
||||||
|
],
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue