[REFACTOR] 簡化權限管理介面,整合權限設定至角色管理,並完成多語系支援

This commit is contained in:
2026-03-16 13:47:16 +08:00
parent 09e1d0dc48
commit 1851e91c86
20 changed files with 411 additions and 296 deletions

View File

@@ -29,8 +29,8 @@ class CompanyController extends Controller
$query->where('status', $request->status);
}
$limit = $request->input('limit', 10);
$companies = $query->latest()->paginate($limit)->withQueryString();
$per_page = $request->input('per_page', 10);
$companies = $query->latest()->paginate($per_page)->withQueryString();
return view('admin.companies.index', compact('companies'));
}

View File

@@ -11,8 +11,9 @@ class DashboardController extends Controller
public function index(Request $request)
{
// 每頁顯示筆數限制 (預設為 10)
$perPage = $request->get('limit', 10);
$perPage = (int) request()->input('per_page', 10);
if ($perPage <= 0) $perPage = 10;
// 從資料庫獲取真實統計數據
$totalRevenue = \App\Models\Member\MemberWallet::sum('balance');
$activeMachines = Machine::where('status', 'online')->count();

View File

@@ -29,7 +29,7 @@ class DataConfigController extends Controller
public function adminProducts()
{
return view('admin.placeholder', [
'title' => '管理者可賣商品',
'title' => '商品狀態',
'description' => '管理者商品銷售權限',
]);
}

View File

@@ -13,13 +13,13 @@ class MachineController extends AdminController
*/
public function index(Request $request): View
{
$limit = $request->input('limit', 10);
$per_page = $request->input('per_page', 10);
$machines = Machine::query()
->when($request->status, function ($query, $status) {
return $query->where('status', $status);
})
->latest()
->paginate($limit)
->paginate($per_page)
->withQueryString();
return view('admin.machines.index', compact('machines'));
@@ -42,7 +42,7 @@ class MachineController extends AdminController
*/
public function logs(Request $request): View
{
$limit = $request->input('limit', 20);
$per_page = $request->input('per_page', 20);
$logs = \App\Models\Machine\MachineLog::with('machine')
->when($request->level, function ($query, $level) {
return $query->where('level', $level);
@@ -51,7 +51,7 @@ class MachineController extends AdminController
return $query->where('machine_id', $machineId);
})
->latest()
->paginate($limit)->withQueryString();
->paginate($per_page)->withQueryString();
$machines = Machine::select('id', 'name')->get();

View File

@@ -7,93 +7,19 @@ use Illuminate\Http\Request;
class PermissionController extends Controller
{
// APP功能管理
public function appFeatures()
{
return view('admin.placeholder', [
'title' => 'APP功能管理',
'description' => 'APP功能權限設定',
]);
}
// 資料設定權限
public function dataConfig()
{
return view('admin.placeholder', [
'title' => '資料設定權限',
'description' => '資料設定功能權限',
]);
}
// 銷售管理權限
public function sales()
{
return view('admin.placeholder', [
'title' => '銷售管理權限',
'description' => '銷售管理功能權限',
]);
}
// 機台管理權限
public function machines()
{
return view('admin.placeholder', [
'title' => '機台管理權限',
'description' => '機台管理功能權限',
]);
}
// 倉庫管理權限
public function warehouses()
{
return view('admin.placeholder', [
'title' => '倉庫管理權限',
'description' => '倉庫管理功能權限',
]);
}
// 分析管理權限
public function analysis()
{
return view('admin.placeholder', [
'title' => '分析管理權限',
'description' => '分析管理功能權限',
]);
}
// 稽核管理權限
public function audit()
{
return view('admin.placeholder', [
'title' => '稽核管理權限',
'description' => '稽核管理功能權限',
]);
}
// 遠端管理權限
public function remote()
{
return view('admin.placeholder', [
'title' => '遠端管理權限',
'description' => '遠端管理功能權限',
]);
}
// Line管理權限
public function line()
{
return view('admin.placeholder', [
'title' => 'Line管理權限',
'description' => 'Line管理功能權限',
]);
}
// 權限角色設定
public function roles()
{
$limit = request()->input('limit', 10);
$roles = \Spatie\Permission\Models\Role::withCount('users')->latest()->paginate($limit)->withQueryString();
return view('admin.permission.roles', compact('roles'));
$per_page = request()->input('per_page', 10);
$roles = \Spatie\Permission\Models\Role::with(['permissions', 'users'])->latest()->paginate($per_page)->withQueryString();
$all_permissions = \Spatie\Permission\Models\Permission::all()->groupBy(function($perm) {
if (str_starts_with($perm->name, 'menu.')) {
return 'menu';
}
return 'other';
});
return view('admin.permission.roles', compact('roles', 'all_permissions'));
}
/**
@@ -103,14 +29,20 @@ class PermissionController extends Controller
{
$validated = $request->validate([
'name' => 'required|string|max:255|unique:roles,name',
'permissions' => 'nullable|array',
'permissions.*' => 'string|exists:permissions,name',
]);
\Spatie\Permission\Models\Role::create([
$role = \Spatie\Permission\Models\Role::create([
'name' => $validated['name'],
'guard_name' => 'web',
'is_system' => false,
]);
if (!empty($validated['permissions'])) {
$role->syncPermissions($validated['permissions']);
}
return redirect()->back()->with('success', __('Role created successfully.'));
}
@@ -121,15 +53,17 @@ class PermissionController extends Controller
{
$role = \Spatie\Permission\Models\Role::findOrFail($id);
if ($role->is_system) {
return redirect()->back()->with('error', __('System roles cannot be renamed.'));
}
$validated = $request->validate([
'name' => 'required|string|max:255|unique:roles,name,' . $id,
'permissions' => 'nullable|array',
'permissions.*' => 'string|exists:permissions,name',
]);
$role->update(['name' => $validated['name']]);
if (!$role->is_system) {
$role->update(['name' => $validated['name']]);
}
$role->syncPermissions($validated['permissions'] ?? []);
return redirect()->back()->with('success', __('Role updated successfully.'));
}
@@ -154,15 +88,6 @@ class PermissionController extends Controller
return redirect()->back()->with('success', __('Role deleted successfully.'));
}
// 其他功能管理
public function others()
{
return view('admin.placeholder', [
'title' => '其他功能管理',
'description' => '其他特殊功能權限',
]);
}
// 帳號管理
public function accounts(Request $request)
{
@@ -187,11 +112,12 @@ class PermissionController extends Controller
$query->where('company_id', $request->company_id);
}
$limit = $request->input('limit', 10);
$users = $query->latest()->paginate($limit)->withQueryString();
$per_page = $request->input('per_page', 10);
$users = $query->latest()->paginate($per_page)->withQueryString();
$companies = auth()->user()->isSystemAdmin() ? \App\Models\System\Company::all() : collect();
$roles = \Spatie\Permission\Models\Role::all();
return view('admin.data-config.accounts', compact('users', 'companies'));
return view('admin.data-config.accounts', compact('users', 'companies', 'roles'));
}
/**
@@ -281,13 +207,4 @@ class PermissionController extends Controller
return redirect()->back()->with('success', __('Account deleted successfully.'));
}
// AI智能預測
public function aiPrediction()
{
return view('admin.placeholder', [
'title' => 'AI智能預測',
'description' => 'AI功能權限設定',
]);
}
}