342 lines
13 KiB
PHP
342 lines
13 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Management;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Illuminate\Http\Request;
|
|
use App\Models\Master\MasterAccessMenu;
|
|
use App\Models\Master\MasterMenu;
|
|
use App\Models\Master\MasterGroup;
|
|
|
|
class AksesController extends Controller
|
|
{
|
|
protected $title = 'Hak Akses User';
|
|
protected $template = 'modules.management.role.akses';
|
|
protected $route = 'modules.management.role.akses';
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index()
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*/
|
|
public function create()
|
|
{
|
|
//
|
|
}
|
|
|
|
public function getRoute($prefix = '*'): string
|
|
{
|
|
return $this->route.'.'.$prefix;
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
permission('is_update', $this->getRoute(), false, 'module');
|
|
$id = decode_id($request->group_id);
|
|
// dd($id);
|
|
$_read = [];
|
|
if ($request->has('is_read')) {
|
|
foreach ($request->input('is_read') as $val) {
|
|
$_read[] = ['ms_menu_id' => $val];
|
|
}
|
|
}
|
|
|
|
$_create = [];
|
|
if ($request->has('is_create')) {
|
|
foreach ($request->input('is_create') as $val) {
|
|
$_create[] = ['ms_menu_id' => $val];
|
|
}
|
|
}
|
|
|
|
$_update = [];
|
|
if ($request->has('is_update')) {
|
|
foreach ($request->input('is_update') as $val) {
|
|
$_update[] = ['ms_menu_id' => $val];
|
|
}
|
|
}
|
|
|
|
$_delete = [];
|
|
if ($request->has('is_delete')) {
|
|
foreach ($request->input('is_delete') as $val) {
|
|
$_delete[] = ['ms_menu_id' => $val];
|
|
}
|
|
}
|
|
|
|
$_download = [];
|
|
if ($request->has('is_download')) {
|
|
foreach ($request->input('is_download') as $val) {
|
|
$_download[] = ['ms_menu_id' => $val];
|
|
}
|
|
}
|
|
|
|
$merged = array_merge($_read, $_create, $_update, $_delete, $_download);
|
|
$result = [];
|
|
foreach ($merged as $key => $data) {
|
|
$access = trimId($data['ms_menu_id']);
|
|
$module = MasterMenu::find($access[1]);
|
|
if (isset($result[$access[1]])) {
|
|
$result[$access[1]][$access[0]] = 1;
|
|
} else {
|
|
$result[$access[1]] = ['ms_menu_id' => intval($access[1]), $access[0] => 1, 'ms_group_id' => intval($id), 'module' => $module->module, 'menu_group' => $request->input('menu_group')];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Merge all privileges into json
|
|
*/
|
|
$group = MasterGroup::find(intval($id));
|
|
if ($merged) {
|
|
$current = MasterAccessMenu::where('menu_group',$request->input('menu_group'))->where('ms_group_id',intval($id))->get();
|
|
$insert = null;
|
|
if ($current->count() > 0) {
|
|
$deletedRows = MasterAccessMenu::where('menu_group',$request->input('menu_group'))->where('ms_group_id',intval($id))->delete();
|
|
if ($deletedRows) {
|
|
foreach ($result as $val) {
|
|
$insert = MasterAccessMenu::create($val);
|
|
}
|
|
}
|
|
} else {
|
|
foreach ($result as $val) {
|
|
$insert = MasterAccessMenu::create($val);
|
|
}
|
|
}
|
|
|
|
if ($insert) {
|
|
logActivity($request, __('Edit',['val' => strtolower(__('module.group.access.title',['val' => $group->name]))]));
|
|
return redirect('management/role/')->with('message', __('Berhasil Update Data'))
|
|
->with('type', 'success');
|
|
} else {
|
|
throw new GeneralException(__('Maaf Terjadi Kesalahan'));
|
|
}
|
|
} else {
|
|
$current = MasterAccessMenu::where('menu_group',$request->input('menu_group'))->where('ms_group_id', intval($id))->count();
|
|
if ($current > 0) {
|
|
MasterAccessMenu::where('menu_group', $request->input('menu_group'))->where('ms_group_id', intval($id))->delete();
|
|
logActivity($request, __('Delete',['val' => strtolower(__('Title',['val' => $group->name]))]));
|
|
return redirect('management/role/')->with('message', __('Berhasil Update Data'))
|
|
->with('type', 'success');
|
|
} else {
|
|
throw new GeneralException(__('Maaf Terjadi Kesalahan'));
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*/
|
|
public function show(string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
$data['key'] = decode_id($id);
|
|
$data['id'] = decode_id($id);
|
|
$data['group'] = MasterGroup::where('MsGroupId',decode_id($id))->first();
|
|
|
|
$data['breadcrumbs'] = [
|
|
['name' => 'Dashboard','url' => url('dashboard')],
|
|
['name' => 'Management & Akses Role'],
|
|
['name' => 'Data Role','url' => url('management/role/')],
|
|
['name' => 'Role '.$data['group']->name,'active' => true],
|
|
];
|
|
|
|
$data['type'] = 'sidebar';
|
|
// $data['groupMenus'] = MasterMenu::where('status',true)->get();
|
|
$data['menu'] = $this->getMenu($data['key'], $data['type']);
|
|
$data['title'] = $this->title.' '.$data['group']->name;
|
|
$data['route'] = $this->route;
|
|
return view($this->template.'.form',$data);
|
|
}
|
|
|
|
public function getMenuByParentPosition($id, $type, $active = [1])
|
|
{
|
|
return MasterMenu::where('parent_id', '=', $id)
|
|
->where('menu_type', '=', $type)
|
|
->whereIn('status', $active)
|
|
->orderBy('ordering')
|
|
->get();
|
|
}
|
|
|
|
public function getParentByType($type)
|
|
{
|
|
return MasterMenu::where('parent_id', '=', 0)
|
|
->where('menu_type', '=', $type)
|
|
->orderBy('ordering')
|
|
->get();
|
|
}
|
|
|
|
public function getMenuByParent($id, $active = [1])
|
|
{
|
|
return MasterMenu::where('parent_id', '=', $id)
|
|
->whereIn('status', $active)
|
|
->orderBy('ordering')
|
|
->get();
|
|
}
|
|
|
|
/**
|
|
* @param $id
|
|
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model|null|object
|
|
*/
|
|
public function getActiveById($id)
|
|
{
|
|
return MasterMenu::where('ms_menu_id', '=' , $id)
|
|
->where('status', '=' , true)
|
|
->first();
|
|
}
|
|
|
|
/**
|
|
* Get all active menu by menu position
|
|
*
|
|
* @param $type
|
|
* @return mixed
|
|
*/
|
|
public function getActiveByPosition($type)
|
|
{
|
|
return MasterMenu::where('menu_type', '=' , $type)
|
|
->where('status', '=' , true)
|
|
->orderBy('ordering')
|
|
->get();
|
|
}
|
|
|
|
/**
|
|
* @param $type
|
|
* @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Database\Eloquent\Model[]
|
|
*/
|
|
public function getParentByTypeStatus($type)
|
|
{
|
|
return MasterMenu::where('parent_id', '=', 0)
|
|
->where('menu_type', '=', $type)
|
|
->where('status','=',true)
|
|
->orderBy('ordering')
|
|
->get();
|
|
}
|
|
|
|
public function getMenu($id, $type)
|
|
{
|
|
$parent = $this->getMenuByParentPosition(0,$type);
|
|
$_parent = [];
|
|
foreach ($parent as $row) {
|
|
$lev1 = $this->getMenuByParent($row->MsMenuId);
|
|
$_lev1 = [];
|
|
foreach ($lev1 as $l1) {
|
|
$lev2 = $this->getMenuByParent($l1->MsMenuId);
|
|
$_lev2 = [];
|
|
foreach ($lev2 as $l2) {
|
|
$lev3 = $this->getMenuByParent($l2->MsMenuId);
|
|
$_lev3 = [];
|
|
foreach ($lev3 as $l3) {
|
|
$lev4 = $this->getMenuByParent($l3->MsMenuId);
|
|
$_lev4 = [];
|
|
foreach ($lev4 as $l4) {
|
|
$lev4Access = MasterAccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l4->MsMenuId)->first();
|
|
$_lev4[] = [
|
|
'id' => $l4->MsMenuId,
|
|
'title' => $l4->title,
|
|
'ordering' => $l4->ordering,
|
|
'checked' => [
|
|
"is_create" => $lev4Access ? $lev4Access->is_create : 0,
|
|
"is_read" => $lev4Access ? $lev4Access->is_read : 0,
|
|
"is_update" => $lev4Access ? $lev4Access->is_update : 0,
|
|
"is_delete" => $lev4Access ? $lev4Access->is_delete : 0,
|
|
"is_download" => $lev4Access ? $lev4Access->is_download : 0,
|
|
]
|
|
];
|
|
}
|
|
$lev3Access = MasterAccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l3->MsMenuId)->first();
|
|
$_lev3[] = [
|
|
'id' => $l3->MsMenuId,
|
|
'title' => $l3->title . (!!$l3->meta_title?" ##Meta: ". $l3->meta_title:""),
|
|
'ordering' => $l3->ordering,
|
|
'level4' => $_lev4,
|
|
'checked' => [
|
|
"is_create" => $lev3Access ? $lev3Access->is_create : 0,
|
|
"is_read" => $lev3Access ? $lev3Access->is_read : 0,
|
|
"is_update" => $lev3Access ? $lev3Access->is_update : 0,
|
|
"is_delete" => $lev3Access ? $lev3Access->is_delete : 0,
|
|
"is_download" => $lev3Access ? $lev3Access->is_download : 0,
|
|
]
|
|
];
|
|
}
|
|
$lev2Access = MasterAccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l2->MsMenuId)->first();
|
|
$_lev2[] = [
|
|
'id' => $l2->MsMenuId,
|
|
'title' => $l2->title . " (".(!!$l2->meta_title?$l2->meta_title."@":""). "url:" . $l2->url.")",
|
|
'ordering' => $l2->ordering,
|
|
'level3' => $_lev3,
|
|
'checked' => [
|
|
"is_create" => $lev2Access ? $lev2Access->is_create : 0,
|
|
"is_read" => $lev2Access ? $lev2Access->is_read : 0,
|
|
"is_update" => $lev2Access ? $lev2Access->is_update : 0,
|
|
"is_delete" => $lev2Access ? $lev2Access->is_delete : 0,
|
|
"is_download" => $lev2Access ? $lev2Access->is_download : 0,
|
|
]
|
|
];
|
|
}
|
|
|
|
$lev1Access = MasterAccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $l1->MsMenuId)->first();
|
|
$_lev1[] = [
|
|
'id' => $l1->MsMenuId,
|
|
'title' => $l1->title,
|
|
'ordering' => $l1->ordering,
|
|
'level2' => $_lev2,
|
|
'checked' => [
|
|
"is_create" => $lev1Access ? $lev1Access->is_create : 0,
|
|
"is_read" => $lev1Access ? $lev1Access->is_read : 0,
|
|
"is_update" => $lev1Access ? $lev1Access->is_update : 0,
|
|
"is_delete" => $lev1Access ? $lev1Access->is_delete : 0,
|
|
"is_download" => $lev1Access ? $lev1Access->is_download : 0,
|
|
]
|
|
];
|
|
}
|
|
|
|
$parentAccess = MasterAccessMenu::where('ms_group_id', '=', $id)->where('ms_menu_id', '=', $row->MsMenuId)->first();
|
|
$_parent[] = [
|
|
'id' => $row->MsMenuId,
|
|
'title' => $row->title,
|
|
'ordering' => $row->ordering,
|
|
'level1' => $_lev1,
|
|
'checked' => [
|
|
"is_create" => $parentAccess ? $parentAccess->is_create : 0,
|
|
"is_read" => $parentAccess ? $parentAccess->is_read : 0,
|
|
"is_update" => $parentAccess ? $parentAccess->is_update : 0,
|
|
"is_delete" => $parentAccess ? $parentAccess->is_delete : 0,
|
|
"is_download" => $parentAccess ? $parentAccess->is_download : 0,
|
|
]
|
|
];
|
|
|
|
}
|
|
|
|
return $_parent;
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(Request $request, string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*/
|
|
public function destroy(string $id)
|
|
{
|
|
//
|
|
}
|
|
}
|