create feat management role menu
This commit is contained in:
@@ -2,9 +2,13 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Menu;
|
||||
use App\Models\Role;
|
||||
use App\Models\RoleMenu;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class RolesController extends Controller
|
||||
{
|
||||
@@ -100,4 +104,48 @@ class RolesController extends Controller
|
||||
return redirect()->back()->with("error", $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function menu_permission(string $role_id){
|
||||
try{
|
||||
$role = Role::findOrFail($role_id);
|
||||
$menus = Menu::all();
|
||||
$role_menus = RoleMenu::where('role_id', $role_id)->get() ?? collect();
|
||||
return view('roles.role_menu', compact('role', 'menus', 'role_menus'));
|
||||
}catch(\Exception $e){
|
||||
return redirect()->back()->with("error", $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function update_menu_permission(Request $request, string $role_id){
|
||||
try{
|
||||
$validateData = $request->validate([
|
||||
"permissions" => "array",
|
||||
"permissions.*.allow_show" => "nullable|boolean",
|
||||
"permissions.*.allow_create" => "nullable|boolean",
|
||||
"permissions.*.allow_update" => "nullable|boolean",
|
||||
"permissions.*.allow_destroy" => "nullable|boolean"
|
||||
]);
|
||||
|
||||
$role = Role::find($role_id);
|
||||
|
||||
$permissionsArray = [];
|
||||
foreach ($validateData['permissions'] as $menu_id => $permission) {
|
||||
$permissionsArray[$menu_id] = [
|
||||
"allow_show" => (int) ($permission["allow_show"] ?? 0),
|
||||
"allow_create" => (int) ($permission["allow_create"] ?? 0),
|
||||
"allow_update" => (int) ($permission["allow_update"] ?? 0),
|
||||
"allow_destroy" => (int) ($permission["allow_destroy"] ?? 0),
|
||||
"updated_at" => now(),
|
||||
];
|
||||
}
|
||||
|
||||
// Sync will update existing records and insert new ones
|
||||
$role->menus()->sync($permissionsArray);
|
||||
|
||||
return redirect()->route("role-menu.permission", $role_id)->with('success','Menu Permission updated successfully');
|
||||
}catch(\Exception $e){
|
||||
Log::error("Error updating role_menu:", ["error" => $e->getMessage()]);
|
||||
return redirect()->route("role-menu.permission", $role_id)->with("error", $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user