middleware([ "auth" ])->only("logout"); // $this->middleware([ "guest" ])->only("login"); // // $this->middleware([ "permission:staff.list", "role:admin" ])->only("index"); // $this->middleware([ "permission:staff.show", "role:admin" ])->only("show"); // $this->middleware([ "permission:staff.edit", "role:admin" ])->only([ "edit", "update" ]); // $this->middleware([ "permission:staff.delete", "role:admin" ])->only("delete"); } /** * Display a listing of the resource. * * @param Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function index(Request $request) { $staffs = Staff::query()->paginate($request->query("page", 20)); return Response::detect("staff.index", [ "staffs" => $staffs ]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function create() { return Response::detect("staff.create"); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function store(Request $request) { $data = $request->validate([ "name_first" => "required|max:255", "name_last" => "required|max:255", "email" => "required|email|unique:staff", "password" => "required|max:60", "phone" => "required|unique:staff" ]); $staff = new Staff($data); $staff->save(); return Response::detect("staff.store"); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function show($id) { $staff = Staff::find($id); return Response::detect("staff.show", [ "staff" => $staff ]); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function edit($id) { $staff = Staff::find($id); return Response::detect("staff.edit", [ "staff" => $staff ]); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function update(Request $request, $id) { $data = $request->all(); // $data = $request->validate([ // "name_first" => "max:255", // "name_last" => "max:255", // "email" => "email|unique:staff", // "password" => "max:60", // "phone" => "unique:staff", // ]); // Validates if the staff is updating itself or another staff. // if($id === Auth::id()) { // $staff = Auth::staff(); // // $staff->update($data); // // $staff->save(); // return Response::detect("staff.edit", [ // "staff" => $staff // ]); // } //TODO: Implement when security's ready!!! // else if(Auth::staff()->hasPermissionTo("staff.edit")) { $staff = Staff::find($id); /** @var Staff $staff */ $staff->update($data); $staff->save(); // } $staffs = Staff::query()->paginate(20); return Response::detect("staff.index", [ "staffs" => $staffs ]); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function destroy(Staff $id) { $id->delete(); return redirect()->route("staff.index"); } /*******************************************/ /* Authentication */ /*******************************************/ public function showLogin() { return view("admin.staff.login"); } public function login(Request $request) { $data = $request->only("email", "password"); if(Auth::attempt($data)) { //TODO: Implement home? return redirect()->route("staff.index"); } return redirect()->back(303); } public function logout(Request $request) { Auth::logout(); return redirect()->to("/"); } }