Moving permissions to form requests

This commit is contained in:
Hillel Coren 2016-05-01 15:04:55 +03:00
parent 05bd8d9318
commit 2efd419791
11 changed files with 132 additions and 39 deletions

View File

@ -18,6 +18,10 @@ use App\Ninja\Repositories\TaskRepository;
use App\Ninja\Repositories\InvoiceRepository;
use App\Services\TaskService;
use App\Http\Requests\TaskRequest;
use App\Http\Requests\CreateTaskRequest;
use App\Http\Requests\UpdateTaskRequest;
class TaskController extends BaseController
{
protected $taskRepo;
@ -66,16 +70,16 @@ class TaskController extends BaseController
*
* @return Response
*/
public function store()
public function store(CreateTaskRequest $request)
{
return $this->save();
}
public function show($publicId)
public function show(TaskRequest $request)
{
Session::reflash();
return Redirect::to("tasks/{$publicId}/edit");
return Redirect::to("tasks/{$request->task_id}/edit");
}
/**
@ -83,14 +87,13 @@ class TaskController extends BaseController
*
* @return Response
*/
public function create($clientPublicId = 0)
public function create(TaskRequest $request)
{
$this->authorizeCreate();
$this->checkTimezone();
$data = [
'task' => null,
'clientPublicId' => Input::old('client') ? Input::old('client') : ($clientPublicId ?: 0),
'clientPublicId' => Input::old('client') ? Input::old('client') : ($request->client_id ?: 0),
'method' => 'POST',
'url' => 'tasks',
'title' => trans('texts.new_task'),
@ -109,13 +112,11 @@ class TaskController extends BaseController
* @param int $id
* @return Response
*/
public function edit($publicId)
public function edit(TaskRequest $request)
{
$this->checkTimezone();
$task = Task::scope($publicId)->with('client', 'invoice')->withTrashed()->firstOrFail();
$this->authorize('edit', $task);
$task = $request->entity();
$actions = [];
if ($task->invoice) {
@ -143,7 +144,7 @@ class TaskController extends BaseController
'task' => $task,
'clientPublicId' => $task->client ? $task->client->public_id : 0,
'method' => 'PUT',
'url' => 'tasks/'.$publicId,
'url' => 'tasks/'.$task->public_id,
'title' => trans('texts.edit_task'),
'duration' => $task->is_running ? $task->getCurrentDuration() : $task->getDuration(),
'actions' => $actions,
@ -163,9 +164,11 @@ class TaskController extends BaseController
* @param int $id
* @return Response
*/
public function update($publicId)
public function update(UpdateTaskRequest $request)
{
return $this->save($publicId);
$task = $request->entity();
return $this->save($task->public_id);
}
private static function getViewModel()
@ -180,20 +183,10 @@ class TaskController extends BaseController
{
$action = Input::get('action');
$this->authorizeUpdate(array('public_id'=>$publicId)/* Hacky, but works */);
if (in_array($action, ['archive', 'delete', 'restore'])) {
return self::bulk();
}
if ($validator = $this->taskRepo->getErrors(Input::all())) {
$url = $publicId ? 'tasks/'.$publicId.'/edit' : 'tasks/create';
Session::flash('error', trans('texts.task_errors'));
return Redirect::to($url)
->withErrors($validator)
->withInput();
}
$task = $this->taskRepo->save($publicId, Input::all());
Session::flash('message', trans($publicId ? 'texts.updated_task' : 'texts.created_task'));

View File

@ -1,6 +1,6 @@
<?php namespace App\Http\Requests;
class CreateCreditRequest extends EntityRequest
class CreateCreditRequest extends CreditRequest
{
/**
* Determine if the user is authorized to make this request.

View File

@ -0,0 +1,26 @@
<?php namespace App\Http\Requests;
class CreateTaskRequest extends TaskRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return $this->user()->can('create', ENTITY_TASK);
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'time_log' => 'time_log',
];
}
}

View File

@ -0,0 +1,7 @@
<?php namespace App\Http\Requests;
class CreditRequest extends EntityRequest {
protected $entityType = ENTITY_CREDIT;
}

View File

@ -0,0 +1,18 @@
<?php namespace App\Http\Requests;
class ExpenseRequest extends EntityRequest {
protected $entityType = ENTITY_EXPENSE;
public function entity()
{
$expense = parent::entity();
// eager load the contacts
if ($expense && ! count($expense->documents)) {
$expense->load('documents');
}
return $expense;
}
}

View File

@ -0,0 +1,7 @@
<?php namespace App\Http\Requests;
class PaymentRequest extends EntityRequest {
protected $entityType = ENTITY_PAYMENT;
}

View File

@ -0,0 +1,7 @@
<?php namespace App\Http\Requests;
class TaskRequest extends EntityRequest {
protected $entityType = ENTITY_TASK;
}

View File

@ -0,0 +1,26 @@
<?php namespace App\Http\Requests;
class UpdateTaskRequest extends TaskRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return $this->user()->can('edit', $this->entity());
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'time_log' => 'time_log',
];
}
}

View File

@ -0,0 +1,19 @@
<?php namespace App\Http\Requests;
class VendorRequest extends EntityRequest {
protected $entityType = ENTITY_VENDOR;
public function entity()
{
$vendor = parent::entity();
// eager load the contacts
if ($vendor && ! count($vendor->vendorcontacts)) {
$vendor->load('vendorcontacts');
}
return $vendor;
}
}

View File

@ -64,20 +64,6 @@ class TaskRepository
return $query;
}
public function getErrors($input)
{
$rules = [
'time_log' => 'time_log',
];
$validator = \Validator::make($input, $rules);
if ($validator->fails()) {
return $validator;
}
return false;
}
public function save($publicId, $data)
{
if ($publicId) {

View File

@ -114,6 +114,10 @@
</div>
</div>
@if ($errors->first('time_log'))
<div class="alert alert-danger"><li>{{ trans('texts.task_errors') }} </li></div>
@endif
</div>
</div>
@ -455,7 +459,7 @@
@endif
@endif
@if (Session::has('error'))
@if ($errors->first('time_log'))
loadTimeLog({!! json_encode(Input::old('time_log')) !!});
model.showTimeOverlaps();
showTimeDetails();