middleware('permission:role-list|role-create|role-edit|role-delete', ['only' => ['RoleManager', 'show', 'index']]); $this->middleware('permission:role-create', ['only' => ['storeRole']]); $this->middleware('permission:role-edit', ['only' => ['updateRole']]); $this->middleware('permission:role-delete', ['only' => ['deleteRole']]); } #region 管理群組(角色)管理 public function RoleManager() { $typeName = [ 0 => "檢視管理群組", 1 => "違規停車-審查", 2 => "區間-審查", 3 => "路口-審查", 4 => "禁行車種-審查", 5 => "檢視使用者", ]; $permissions = Permission::query(); // .env 檔案中的權限類型SYSTEM_MULTISYS SYSTEM_OVERSPEEDRED SYSTEM_VIOLATIONPARKING $types = [1, 6]; // dd($types); if (env('SYSTEM_MULTISYS', false)) { array_push($types, 4); } if (env('SYSTEM_INTERVAL', false)) { array_push($types, 3); } if (env('SYSTEM_OVERSPEEDRED', false)) { array_push($types, 7); array_push($types, 8); } if (env('SYSTEM_VIOLATIONPARKING', false)) { array_push($types, 2); } // dd($types); $permissions = $permissions->whereIn('type', $types); $permissions = $permissions->orderBy('type', 'asc')->orderBy('sort', 'asc')->get(); // 將權限根據 type 分類 並且排序 $permissions = $permissions->sortBy('type')->groupBy('type'); // dd(env('SYSTEM_MULTISYS', false), env('SYSTEM_OVERSPEEDRED', false), env('SYSTEM_VIOLATIONPARKING', false)); // dd($permissions->toArray()); return view('system.setting.RoleManager')->with('permissions', $permissions); } public function index(Request $request) { // 如果沒有登入 if (!auth('api')->check()) { return response()->json(['message' => 'Unauthenticated.'], 401); } #region DataTable 搜尋屬性 $draw = $request->get('draw'); $start = $request->get("start"); $rowperpage = $request->get("length"); // Rows display per page $columnIndex_arr = $request->get('order'); $columnName_arr = $request->get('columns'); $order_arr = $request->get('order'); $search_arr = $request->get('search'); $columnIndex = $columnIndex_arr[0]['column']; // Column index $columnName = $columnName_arr[$columnIndex]['data']; // Column name $columnSortOrder = $order_arr[0]['dir']; // asc or desc $searchValue = $search_arr['value']; // Search value #endregion // Role with permissions $records = Role::query(); $records = $records->with('permissions'); $records = $records->whereNotIn('id', [1]); $totalRecords = $records->count(); if (isset($columnName)) $records->orderBy($columnName, $columnSortOrder); if (isset($searchValue)) { $records->where(function ($query) use ($searchValue) { // $query->where('outlet_id', 'like', '%' . $searchValue . '%') // ->orwhere('name', 'like', '%' . $searchValue . '%') // ->orwhere('serialnumber', 'like', '%' . $searchValue . '%') // ->orwhere('creator_id', 'like', '%' . $searchValue . '%'); }); } $totalRecordswithFilter = $records->count(); $data_arr = $records->get(); $response = array( "draw" => intval($draw), "iTotalRecords" => $totalRecords, "iTotalDisplayRecords" => $totalRecordswithFilter, "aaData" => $data_arr ); return response()->json($response); } // 新增管理群組 public function store(Request $request) { $data = $request->all(); $idx = Role::max('id') + 1; $data['name'] = "role-$idx"; $data['guard_name'] = '*'; $role = Role::create($data); $role->syncPermissions($request->permission); $logData = [ 'action' => 'create', 'action_detail' => '新增管理群組', 'ip' => request()->ip(), 'remark' => "新增管理群組:$role->display_name", ]; LogWriter::writeLog($logData, 'api'); return response()->json(['success' => '新增成功']); } public function show(Request $request, $id) { if (!auth('api')->check()) { return response()->json(['message' => 'Unauthenticated.'], 401); } $role = Role::with('permissions')->find($id); $permissions = Permission::orderBy('type', 'asc')->orderBy('sort', 'asc')->get(); return response()->json(['role' => $role, 'permissions' => $permissions]); } public function update(Request $request, $id) { if ($id == 1) { return response()->json(['error' => '此群組不可編輯']); } $role = Role::find($id); $role->update($request->all()); // sync permissions $role->syncPermissions($request->permission); $logData = [ 'action' => 'edit', 'action_detail' => '編輯管理群組', 'ip' => request()->ip(), 'remark' => "編輯管理群組:$role->display_name", ]; LogWriter::writeLog($logData, 'api'); return response()->json(['success' => '編輯成功']); } // 刪除管理群組 public function destory(Request $request, $id) { if ($id == 1) { return response()->json(['error' => '此群組不可刪除']); } $role = Role::find($id); $role->delete(); $logData = [ 'action' => 'delete', 'action_detail' => '刪除管理群組', 'ip' => request()->ip(), 'remark' => "刪除管理群組:$role->display_name", ]; LogWriter::writeLog($logData, 'api'); return response()->json(['success' => '刪除成功']); } #endregion }