User access dan user role dinamis

This commit is contained in:
2024-06-09 12:49:40 +07:00
parent 1eb6eb9cf3
commit fce657412e
23 changed files with 2686 additions and 27 deletions

View File

@@ -0,0 +1,125 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Models\Navigations;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class NavigationController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
// Ambil semua navigasi dari tabel dan ubah menjadi array
$navigations = Navigations::all()->toArray();
$navigationMaster = [];
if ($navigations) {
// Buat array untuk menyimpan menu utama
foreach ($navigations as $navigation) {
if ($navigation['parent_id'] == 0) {
// Tambahkan menu utama ke $navigationMaster
$navigation['children'] = []; // Siapkan array untuk children
$navigationMaster[$navigation['id']] = $navigation;
}
}
// Tambahkan submenu ke menu utama yang sesuai
foreach ($navigations as $navigation) {
if ($navigation['parent_id'] != 0 && isset($navigationMaster[$navigation['parent_id']])) {
$navigationMaster[$navigation['parent_id']]['children'][] = $navigation;
}
}
}
// Ubah array menjadi list tanpa indeks id
$navigationMaster = array_values($navigationMaster);
// Transformasi data untuk sesuai dengan format yang diinginkan
$formattedNavigation = [
'items' => array_map(function ($navItem) {
return [
'title' => $navItem['title'],
'path' => $navItem['path'],
'children' => array_map(function ($child) {
return [
'title' => $child['title'],
'path' => $child['path'],
'icon' => $child['icon'], // Asumsikan Anda memiliki field 'icon' di tabel navigasi
'permission' => $child['permission'],
];
}, $navItem['children']),
'permission' => $navItem['permission'],
];
}, $navigationMaster)
];
return response()->json($formattedNavigation);
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('internal::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('internal::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('internal::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

@@ -6,12 +6,159 @@ 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 UserManagemet extends Controller
class UserManagementController extends Controller
{
public function index(Request $request){
$user = User::all();
return Helper::responseJson(data: $user);
public function index(Request $request)
{
$query = Role::query();
if ($request->has('search')) {
$search = $request->get('search');
$query->where('name', 'like', "%{$search}%");
}
$userRole = $query->paginate(10);
return Helper::paginateResources($userRole);
}
}
public function permission_list(Request $request)
{
$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}%");
}
$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);
}
}