You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
6.3 KiB
179 lines
6.3 KiB
<?php |
|
|
|
namespace App\Http\Controllers\System\Permissions; |
|
|
|
use App\Class\LogWriter; |
|
use App\Http\Controllers\Controller; |
|
use App\Models\Permission; |
|
use App\Models\Role; |
|
use Illuminate\Http\Request; |
|
|
|
class RoleController extends Controller |
|
{ |
|
function __construct() |
|
{ |
|
$this->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 |
|
}
|
|
|