187 lines
5.6 KiB
PHP
187 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace Modules\Internal\Http\Controllers\Api;
|
|
|
|
use App\Helpers\Helper;
|
|
use Illuminate\Contracts\Support\Renderable;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
use Spatie\Permission\Models\Role;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Spatie\Permission\Models\Permission;
|
|
use App\Models\User;
|
|
use App\Models\Person;
|
|
use Crypt;
|
|
|
|
class UserManagementController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$query = Role::query();
|
|
if ($request->has('search')) {
|
|
$search = $request->get('search');
|
|
$query->where('name', 'like', "%{$search}%");
|
|
}
|
|
if($request->has('guard_name'))
|
|
{
|
|
$guard_name = $request->get('guard_name');
|
|
$query->where('guard_name', '=', $guard_name);
|
|
}
|
|
$userRole = $query->paginate(10);
|
|
return Helper::paginateResources($userRole);
|
|
}
|
|
|
|
public function permission_list(Request $request)
|
|
{
|
|
// Ambil nilai guard_name dari query string
|
|
$guardName = $request->query('guard_name');
|
|
|
|
// Jika guard_name ada dalam query, filter berdasarkan guard_name
|
|
if ($guardName) {
|
|
$permissions = Permission::where('guard_name', $guardName)->orderBy('name','asc')->get();
|
|
} else {
|
|
// Jika guard_name tidak ada, ambil semua permissions
|
|
$permissions = Permission::all();
|
|
}
|
|
|
|
return response()->json($permissions);
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'guard_name' => 'required|string|max:255', // Pastikan setiap permission ada di tabel permissions
|
|
]);
|
|
|
|
$newRole = Role::create([
|
|
'name' => $validated['name'],
|
|
'guard_name' => $validated['guard_name'],
|
|
]);
|
|
|
|
if (isset($request->permission_check)) {
|
|
$newRole->syncPermissions($request->permission_check);
|
|
}
|
|
|
|
return response()->json($newRole, 201);
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$role = Role::with('permissions')->findOrFail($id);
|
|
return response()->json($role);
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
$role = Role::with('permissions')->findOrFail($id);
|
|
$validated = $request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'guard_name' => 'required|string|max:255',
|
|
'permission_check' => 'nullable|array',
|
|
'permission_check.*' => 'exists:permissions,id', // Pastikan setiap permission ada di tabel permissions
|
|
]);
|
|
|
|
$role->update([
|
|
'name' => $validated['name'],
|
|
'guard_name' => $validated['guard_name'],
|
|
]);
|
|
|
|
if (isset($validated['permission_check'])) {
|
|
|
|
$permissions = Permission::whereIn('id', $validated['permission_check'])
|
|
->where('guard_name', $validated['guard_name'])
|
|
->get();
|
|
if ($permissions->count() !== count($validated['permission_check'])) {
|
|
return response()->json(['error' => 'One or more permissions are invalid for the specified guard.'], 422);
|
|
}
|
|
$role->syncPermissions($permissions);
|
|
}
|
|
|
|
return response()->json($role);
|
|
}
|
|
|
|
public function list_role(Request $request)
|
|
{
|
|
$query = Role::all();
|
|
$data = [
|
|
'data' => $query
|
|
];
|
|
return response()->json($data);
|
|
}
|
|
|
|
public function store_access(Request $request){
|
|
$user = User::create([
|
|
'email' => $request->email,
|
|
'username' => $request->username,
|
|
'role_id' => $request->roles,
|
|
'password' => Hash::make($request->password),
|
|
]);
|
|
|
|
$person = Person::updateOrCreate(
|
|
[
|
|
'id' => $user->person_id
|
|
],
|
|
[
|
|
'name' => $request->name ?? null
|
|
]
|
|
);
|
|
$user->person_id = $person->id;
|
|
$user->save();
|
|
return response()->json($user);
|
|
}
|
|
|
|
// List Access
|
|
public function list_access(Request $request){
|
|
$userAccess = User::query();
|
|
if ($request->has('search')) {
|
|
$search = $request->get('search');
|
|
$userAccess->where('name', 'like', "%{$search}%");
|
|
}
|
|
if($request->has('guard_name'))
|
|
{
|
|
$guard_name = $request->get('guard_name');
|
|
$userAccess->whereHas('role', function ($query) use ($guard_name) {
|
|
$query->where('guard_name', $guard_name);
|
|
});
|
|
}
|
|
$userAccess = $userAccess->paginate(10);
|
|
return Helper::paginateResources($userAccess);
|
|
}
|
|
|
|
public function edit_access($id){
|
|
$userAccess = User::findOrFail($id);
|
|
return response()->json($userAccess);
|
|
}
|
|
|
|
public function update_access(Request $request, $id){
|
|
$userAccess = User::findOrFail($id);
|
|
|
|
if (!$userAccess) {
|
|
return response()->json(['error' => 'User Not found.'], 404);
|
|
}
|
|
|
|
$userAccess->email = $request->email;
|
|
$userAccess->username = $request->username;
|
|
$userAccess->role_id = $request->roles;
|
|
|
|
if ($request->password){
|
|
$userAccess->password = Hash::make($request->password);
|
|
}
|
|
|
|
$person = Person::updateOrCreate(
|
|
[
|
|
'id' => $userAccess->person_id
|
|
],
|
|
[
|
|
'name' => $request->name ?? null
|
|
]
|
|
);
|
|
|
|
$userAccess->person_id = $person->id;
|
|
$userAccess->save();
|
|
|
|
return response()->json($userAccess);
|
|
}
|
|
}
|