diff --git a/app/Http/Controllers/EmployeesController.php b/app/Http/Controllers/EmployeesController.php
index 0c17490..7ac11a1 100644
--- a/app/Http/Controllers/EmployeesController.php
+++ b/app/Http/Controllers/EmployeesController.php
@@ -36,6 +36,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Session;
+use Illuminate\Support\Facades\View;
use Kwaadpepper\CrudPolicies\Traits\CrudController;
use Maatwebsite\Excel\Excel as LExcel;
use Maatwebsite\Excel\Facades\Excel;
@@ -82,7 +83,7 @@ class EmployeesController extends Controller
public function importExit()
{
$this->authorize('importExit', Employee::class);
- self::shareCrudModelsClassesToView();
+ View::share('modelsClasses', static::getCrudModels());
return view('back.employees.import-exit');
}
@@ -144,7 +145,7 @@ class EmployeesController extends Controller
public function import()
{
$this->authorize('import', Employee::class);
- self::shareCrudModelsClassesToView();
+ View::share('modelsClasses', CrudController::getCrudModels());
return view('back.employees.import');
}
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
index 291a33c..eed70e1 100644
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
+use Illuminate\Support\Facades\View;
use Kwaadpepper\CrudPolicies\Traits\CrudController;
class HomeController extends Controller
@@ -10,7 +11,7 @@ class HomeController extends Controller
public function home()
{
- CrudController::shareCrudModelsClassesToView();
+ View::share('modelsClasses', CrudController::getCrudModels());
return view('back.home');
}
}
diff --git a/app/Http/Controllers/PlanningController.php b/app/Http/Controllers/PlanningController.php
index 6a60ac8..da8d359 100644
--- a/app/Http/Controllers/PlanningController.php
+++ b/app/Http/Controllers/PlanningController.php
@@ -7,6 +7,7 @@ use App\Imports\PlanningImport;
use App\Models\Planning;
use App\Models\Site;
use Illuminate\Http\UploadedFile;
+use Illuminate\Support\Facades\View;
use Kwaadpepper\CrudPolicies\Traits\CrudController;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Excel as LExcel;
@@ -27,7 +28,7 @@ class PlanningController extends Controller
public function import()
{
$this->authorize('import', Planning::class);
- CrudController::shareCrudModelsClassesToView();
+ View::share('modelsClasses', CrudController::getCrudModels());
return view('back.plannings.import');
}
diff --git a/app/Models/Site.php b/app/Models/Site.php
index 36b5a7a..dc64106 100644
--- a/app/Models/Site.php
+++ b/app/Models/Site.php
@@ -2,6 +2,7 @@
namespace App\Models;
+use App\Enums\Role;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Kwaadpepper\CrudPolicies\Enums\CrudAction;
@@ -167,12 +168,15 @@ class Site extends Model
'belongsTo' => Societe::class,
'actions' => [
CrudAction::viewAny(),
- CrudAction::view(),
- CrudAction::create(),
- CrudAction::update()
+ CrudAction::view()
]
]
];
+
+ if (auth()->user() and auth()->user()->role->equals(Role::admin())) {
+ self::$editableProperties['societe_id']['actions'][] = CrudAction::create();
+ self::$editableProperties['societe_id']['actions'][] = CrudAction::update();
+ }
parent::__construct($attributes);
}
diff --git a/app/Models/User.php b/app/Models/User.php
index d82e546..76cb2c4 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -99,7 +99,18 @@ class User extends Authenticatable
'nullable' => false,
'validate' => [
'max:255',
- 'unique:users,email'
+ // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
+ function ($attribute, $value, $fail) {
+ $q = User::query();
+ if ($this->id) {
+ $q = $q->where('id', '!=', $this->id);
+ }
+ if ($q->where('email', $value)->exists()) {
+ $fail(__(':attribute est déjà utilisé', [
+ 'attribute' => $attribute
+ ]));
+ }
+ }
],
'actions' => [
CrudAction::viewAny(),
diff --git a/app/Policies/EmployeePolicy.php b/app/Policies/EmployeePolicy.php
index 9bffdd1..35ff0ed 100644
--- a/app/Policies/EmployeePolicy.php
+++ b/app/Policies/EmployeePolicy.php
@@ -2,9 +2,50 @@
namespace App\Policies;
+use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
+use Kwaadpepper\CrudPolicies\Policies\RootPolicy;
+use App\Policies\Rules\UserStaticRules as USR;
+use App\Policies\Rules\UserRoleRules as URR;
+use App\Policies\Rules\EmployeeStaticRules as SaSR;
+use Illuminate\Database\Eloquent\Model;
+use Kwaadpepper\CrudPolicies\Policies\Rules\StaticRules;
-class EmployeePolicy extends AppPolicies
+class EmployeePolicy extends RootPolicy
{
use HandlesAuthorization;
+
+ /**
+ * Init policies on call
+ *
+ * @param User $user
+ * @param Model $model
+ * @return void
+ */
+ public function setPolicies(User $user, Model $model = null)
+ {
+ /**
+ * This first rule to return true in a policy action authorises the action
+ */
+ $this->policies = [
+ 'employee' => [
+ 'viewAny' => USR::make('everyOne'),
+ 'view' => StaticRules::or([
+ URR::make('userIsAdmin', $user),
+ SaSR::make('employeeIsOwnedByUser', $user, $model)
+ ]),
+ 'update' => StaticRules::or([
+ URR::make('userIsAdmin', $user),
+ SaSR::make('employeeIsOwnedByUser', $user, $model)
+ ]),
+ 'create' => USR::make('everyOne'),
+ 'delete' => StaticRules::or([
+ URR::make('userIsAdmin', $user),
+ SaSR::make('employeeIsOwnedByUser', $user, $model)
+ ]),
+ 'import' => USR::make('everyOne'),
+ 'importExit' => USR::make('everyOne')
+ ]
+ ];
+ }
}
diff --git a/composer.json b/composer.json
index ecf1c54..0834a13 100644
--- a/composer.json
+++ b/composer.json
@@ -12,7 +12,7 @@
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"htmlmin/htmlmin": "^8.0",
- "kwaadpepper/crud-policies": "^0.0.1",
+ "kwaadpepper/crud-policies": "^0.1.1",
"kwaadpepper/enum": "^0.1.4",
"kwaadpepper/image-resizer": "^0.0.3",
"laravel/framework": "^8.12",
diff --git a/composer.lock b/composer.lock
index 727e85a..0a768df 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "0c397e537654e64d226ffcb97dce406b",
+ "content-hash": "24d9aa36e131e7867c72fa78c51cfcb5",
"packages": [
{
"name": "asm89/stack-cors",
@@ -1683,16 +1683,16 @@
},
{
"name": "kwaadpepper/crud-policies",
- "version": "0.0.1",
+ "version": "0.1.1",
"source": {
"type": "git",
"url": "https://github.com/Kwaadpepper/crud-policies.git",
- "reference": "9fb83c3696f2e2bf5b9c06a4ed098b3d089843cc"
+ "reference": "cb3bce79d646c8530add808f04d4406ded910fc9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Kwaadpepper/crud-policies/zipball/9fb83c3696f2e2bf5b9c06a4ed098b3d089843cc",
- "reference": "9fb83c3696f2e2bf5b9c06a4ed098b3d089843cc",
+ "url": "https://api.github.com/repos/Kwaadpepper/crud-policies/zipball/cb3bce79d646c8530add808f04d4406ded910fc9",
+ "reference": "cb3bce79d646c8530add808f04d4406ded910fc9",
"shasum": ""
},
"require": {
@@ -1710,7 +1710,7 @@
"extra": {
"laravel": {
"providers": [
- "Kwaadpepper\\CrudPolicies\\CrudPoliciesServiceProvider"
+ "Kwaadpepper\\CrudPolicies\\Providers\\CrudPoliciesServiceProvider"
]
}
},
@@ -1740,9 +1740,9 @@
],
"support": {
"issues": "https://github.com/Kwaadpepper/crud-policies/issues",
- "source": "https://github.com/Kwaadpepper/crud-policies/tree/0.0.1"
+ "source": "https://github.com/Kwaadpepper/crud-policies/tree/0.1.1"
},
- "time": "2021-07-14T23:54:49+00:00"
+ "time": "2021-07-19T13:20:33+00:00"
},
{
"name": "kwaadpepper/enum",
diff --git a/config/crud-policies.php b/config/crud-policies.php
new file mode 100644
index 0000000..34254a7
--- /dev/null
+++ b/config/crud-policies.php
@@ -0,0 +1,33 @@
+ 'crud-policies',
+
+ /**
+ * The public path where are stored
+ * crud-policies asset files
+ *
+ * Change this if you want to modify
+ * published assets folder under /public
+ ** default is 'vendor/crud-policies'
+ */
+ 'assetPath' => 'vendor/crud-policies',
+
+ /**
+ * This is the package layout that will be used
+ * to display crud elements
+ *
+ * You can publish views to know what sections it
+ * has to display
+ */
+ 'viewLayout' => 'layouts.backend',
+
+ // Dont touch this
+ 'isLoaded' => true
+];
diff --git a/resources/js/back.js b/resources/js/back.js
index 267d60a..40c55f6 100644
--- a/resources/js/back.js
+++ b/resources/js/back.js
@@ -1,2 +1 @@
require('./bootstrap');
-require('./crud');
diff --git a/resources/js/components/backend/belongsTo.vue b/resources/js/components/backend/belongsTo.vue
deleted file mode 100644
index 3a2653f..0000000
--- a/resources/js/components/backend/belongsTo.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-
-