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

<?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
}