function isManageableDepartment($managedDepartment, $currentDepartment) { if ($managedDepartment == $currentDepartment) { return true; } else { $parentDepartment = parentDepartment($currentDepartment); if ($parentDepartment) { if ($parentDepartment == $managedDepartment) { return true; } else { if ($parentDepartment != $currentDepartment) { return isManageableDepartment($managedDepartment, $parentDepartment); } } } else { return false; } } }
/** * Show the form for creating a new resource. * * @return Response */ public function create() { $pageTitle = 'Add New Category'; // If user is administrator if (Auth::user()->hasRole(['administrator'])) { $departments = Department::all()->toArray(); } // If user is department manager if (Auth::user()->hasRole(['department_manager'])) { $managedDepartment = Auth::user()->departments->first(); $allDepartments = Department::all(); foreach ($allDepartments as $oneDepartment) { if (isManageableDepartment($managedDepartment->id, $oneDepartment->id)) { array_push($departments, $oneDepartment->toArray()); } } } // If user is category manager if (Auth::user()->hasRole(['category_manager'])) { $departments = Auth::user()->departments->toArray(); } return view('home.categories.create', compact('pageTitle', 'departments')); }
/** * Display a listing of the resource. * * @return Response */ public function index() { $pageTitle = 'All Departments'; // consider to optimise the order of departments $originalDepartments = Department::all(); $i = 0; $managedDepartment = DB::table('departments')->where('manager', Auth::user()->id)->pluck('id'); foreach ($originalDepartments as $originalDepartment) { $manager = $originalDepartment->manager ? User::find($originalDepartment->manager)->name : 'TBD'; $parent_department = $originalDepartment->parent_department ? Department::find($originalDepartment->parent_department)->display_name : '--'; $isManageable = 0; if (Auth::user()->hasRole(['administrator'])) { $isManageable = 1; } if (Auth::user()->hasRole(['department_manager'])) { if (isManageableDepartment($managedDepartment, $originalDepartment->id)) { $isManageable = 1; } } $departments[$i] = array('number' => $i + 1, 'id' => $originalDepartment->id, 'name' => $originalDepartment->name, 'display_name' => $originalDepartment->display_name, 'description' => $originalDepartment->description, 'manager' => $manager, 'parent_department' => $parent_department, 'is_manageable' => $isManageable); $i++; } return view('home.departments.index', compact('pageTitle', 'departments')); }
/** * Show the form for editing the specified resource. * * @param int $id * @return Response */ public function edit($id) { $user = User::find($id); $pageTitle = 'Update User: '******'administrator'])) { $departments = Department::all()->toArray(); } else { $managedDepartment = Auth::user()->departments->first(); $allDepartments = Department::all(); foreach ($allDepartments as $oneDepartment) { if (isManageableDepartment($managedDepartment->id, $oneDepartment->id)) { array_push($departments, $oneDepartment->toArray()); } } } $currentDepartment = $user->departments ? $user->departments->first() : null; $currentRole = $user->roles ? $user->roles->first() : null; return view('home.users.edit', compact('pageTitle', 'user', 'departments', 'currentDepartment', 'currentRole')); }