Skip to content

Commit bf13984

Browse files
CREATE: Spatie Permissions
1 parent 16523e2 commit bf13984

31 files changed

+1757
-80
lines changed
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\RoleCreateRequest;
7+
use App\Http\Requests\RoleUpdateRequest;
8+
use DB;
9+
use Illuminate\Contracts\Foundation\Application;
10+
use Illuminate\Contracts\View\Factory;
11+
use Illuminate\Contracts\View\View;
12+
use Illuminate\Http\RedirectResponse;
13+
use Spatie\Permission\Models\Permission;
14+
use Spatie\Permission\Models\Role;
15+
16+
class RoleController extends Controller
17+
{
18+
/**
19+
* Display a listing of the resource.
20+
*
21+
* @return void
22+
*/
23+
function __construct()
24+
{
25+
$this->middleware('permission:role-list|role-create|role-edit|role-delete', ['only' => ['index', 'store']]);
26+
$this->middleware('permission:role-create', ['only' => ['create', 'store']]);
27+
$this->middleware('permission:role-edit', ['only' => ['edit', 'update']]);
28+
$this->middleware('permission:role-delete', ['only' => ['destroy']]);
29+
}
30+
31+
/**
32+
* Display a listing of the resource.
33+
*
34+
* @return Application|Factory|View
35+
*/
36+
public function index()
37+
{
38+
$roles = Role::orderBy('id', 'DESC')->paginate(15);
39+
return view('admin.roles.index', compact('roles'));
40+
}
41+
42+
/**
43+
* Show the form for creating a new resource.
44+
*
45+
* @return Application|Factory|View
46+
*/
47+
public function create()
48+
{
49+
$permission = Permission::get();
50+
return view('admin.roles.create', compact('permission'));
51+
}
52+
53+
54+
/**
55+
* Store a newly created resource in storage.
56+
*
57+
* @param RoleCreateRequest $request
58+
* @return RedirectResponse
59+
*/
60+
public function store(RoleCreateRequest $request): RedirectResponse
61+
{
62+
$validated = $request->validated();
63+
64+
$role = Role::create(['name' => $validated['name']]);
65+
$role->syncPermissions($validated['permission']);
66+
67+
return redirect()->route('roles.index')
68+
->with('message', 'Role created successfully');
69+
}
70+
71+
/**
72+
* Display the specified resource.
73+
*
74+
* @param int $id
75+
* @return Application|Factory|View
76+
*/
77+
78+
public function show(int $id)
79+
{
80+
$role = Role::where('id', $id)->with('permissions:name,id')->first();
81+
return view('admin.roles.show', compact('role'));
82+
}
83+
84+
85+
/**
86+
* Show the form for editing the specified resource.
87+
*
88+
* @param int $id
89+
* @return Application|Factory|View
90+
*/
91+
92+
public function edit(int $id)
93+
{
94+
$role = Role::find($id);
95+
$permission = Permission::get();
96+
$rolePermissions = DB::table("role_has_permissions")->where("role_has_permissions.role_id", $id)
97+
->pluck('role_has_permissions.permission_id', 'role_has_permissions.permission_id')
98+
->all();
99+
return view('admin.roles.edit', compact('role', 'permission', 'rolePermissions'));
100+
}
101+
102+
/**
103+
* Update the specified resource in storage.
104+
*
105+
* @param RoleUpdateRequest $request
106+
* @param int $id
107+
* @return RedirectResponse
108+
*/
109+
public function update(RoleUpdateRequest $request, int $id): RedirectResponse
110+
{
111+
$validated = $request->validated();
112+
$role = Role::find($id);
113+
$role->update(['name' => $validated['name']]);
114+
115+
$role->syncPermissions($validated['permission']);
116+
return redirect()->route('roles.index')
117+
->with('message', 'Role updated successfully');
118+
}
119+
120+
/**
121+
* Remove the specified resource from storage.
122+
*
123+
* @param int $id
124+
* @return RedirectResponse
125+
*/
126+
public function destroy(int $id): RedirectResponse
127+
{
128+
DB::table("roles")->where('id', $id)->delete();
129+
return redirect()->route('roles.index')
130+
->with('message', 'Role deleted successfully');
131+
}
132+
}
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Admin;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\UserCreateRequest;
7+
use App\Http\Requests\UserUpdateRequest;
8+
use App\Models\User;
9+
use Illuminate\Contracts\Foundation\Application;
10+
use Illuminate\Contracts\View\Factory;
11+
use Illuminate\Contracts\View\View;
12+
use Illuminate\Http\RedirectResponse;
13+
use Illuminate\Support\Facades\DB;
14+
use Illuminate\Support\Facades\Hash;
15+
use Spatie\Permission\Models\Role;
16+
17+
class UserController extends Controller
18+
{
19+
/**
20+
* Display a listing of the resource.
21+
*
22+
* @return Application|Factory|View
23+
*/
24+
25+
public function index()
26+
{
27+
$users = User::with('roles:id,name')->select(['id', 'name'])->paginate();
28+
return view('admin.users.index', compact('users'));
29+
}
30+
31+
32+
/**
33+
* Show the form for creating a new resource.
34+
*
35+
* @return Application|Factory|View
36+
*/
37+
public function create()
38+
{
39+
$roles = Role::pluck('name', 'name')->all();
40+
return view('admin.users.create', compact('roles'));
41+
}
42+
43+
44+
/**
45+
* Store a newly created resource in storage.
46+
*
47+
* @param UserCreateRequest $request
48+
* @return RedirectResponse
49+
*/
50+
51+
public function store(UserCreateRequest $request): RedirectResponse
52+
{
53+
$validated = $request->validated();
54+
$validated['affiliate_id'] = uniqid();
55+
$validated['password'] = Hash::make($validated['password']);
56+
$user = User::create($validated);
57+
$user->assignRole($request->input('roles'));
58+
59+
return redirect()->route('users.index')
60+
->with('message', 'User created successfully');
61+
}
62+
63+
64+
/**
65+
* Display the specified resource.
66+
*
67+
* @param int $id
68+
* @return Application|Factory|View
69+
*/
70+
71+
public function show(int $id): View
72+
{
73+
$user = User::find($id);
74+
return view('admin.users.show', compact('user'));
75+
}
76+
77+
78+
/**
79+
* Show the form for editing the specified resource.
80+
*
81+
* @param int $id
82+
* @return Application|Factory|View
83+
*/
84+
85+
public function edit(int $id)
86+
{
87+
$user = User::find($id);
88+
$roles = Role::pluck('name', 'name')->all();
89+
$userRole = $user->roles->pluck('name', 'name')->all();
90+
91+
return view('admin.users.edit', compact('user', 'roles', 'userRole'));
92+
}
93+
94+
95+
/**
96+
* Update the specified resource in storage.
97+
*
98+
* @param UserUpdateRequest $request
99+
* @param int $id
100+
* @return RedirectResponse
101+
*/
102+
103+
public function update(UserUpdateRequest $request, int $id): RedirectResponse
104+
{
105+
$validated = $request->validated();
106+
107+
$input = $request->all();
108+
if ($request->has('password')) {
109+
$validated['password'] = Hash::make($input['password']);
110+
}
111+
$user = User::find($id);
112+
113+
$user->update($validated);
114+
DB::table('model_has_roles')->where('model_id', $id)->delete();
115+
$user->assignRole($request->input('roles'));
116+
return redirect()->route('users.index')
117+
->with('message', 'User updated successfully');
118+
}
119+
120+
121+
/**
122+
* Remove the specified resource from storage.
123+
*
124+
* @param int $id
125+
* @return RedirectResponse
126+
*/
127+
128+
public function destroy(int $id): RedirectResponse
129+
{
130+
User::find($id)->delete();
131+
return redirect()->route('users.index')
132+
->with('message', 'User deleted successfully');
133+
}
134+
}

app/Http/Controllers/Auth/RegisterController.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,12 @@ protected function validator(array $data)
6464
*/
6565
protected function create(array $data)
6666
{
67-
return User::create([
67+
$user= User::create([
6868
'name' => $data['name'],
6969
'email' => $data['email'],
7070
'password' => Hash::make($data['password']),
7171
]);
72+
$user->assignRole('Модератор');
73+
return $user;
7274
}
7375
}

app/Http/Kernel.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,8 @@ class Kernel extends HttpKernel
6363
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
6464
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
6565
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
66+
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
67+
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
68+
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
6669
];
6770
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class RoleCreateRequest extends FormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*
12+
* @return bool
13+
*/
14+
public function authorize()
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array
23+
*/
24+
public function rules()
25+
{
26+
return [
27+
'name' => 'required|unique:roles,name',
28+
'permission' => 'required',
29+
];
30+
}
31+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class RoleUpdateRequest extends FormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*
12+
* @return bool
13+
*/
14+
public function authorize()
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array
23+
*/
24+
public function rules()
25+
{
26+
return [
27+
'name' => 'required',
28+
'permission' => 'required',
29+
];
30+
}
31+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace App\Http\Requests;
4+
5+
use Illuminate\Foundation\Http\FormRequest;
6+
7+
class UserCreateRequest extends FormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*
12+
* @return bool
13+
*/
14+
public function authorize()
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array
23+
*/
24+
public function rules()
25+
{
26+
return [
27+
'name' => ['required', 'max:255', 'string'],
28+
'email' => ['required', 'email', 'unique:users'],
29+
'password' => ['required', 'confirmed'],
30+
];
31+
}
32+
}

0 commit comments

Comments
 (0)