@ может быть проблема с директивой - laravel - PullRequest
0 голосов
/ 23 мая 2018

jobs.edit.blade.php могут быть доступны зарегистрированным пользователям

из них бухгалтер может получить доступ к некоторым флажкам (видимым только ему)

Изменены значения базы данных (логическое значение)) в соответствии с флажками, предоставленными бухгалтером.

@can ('isAccountant')
//some code with checkboxes
@endcan

Проблема заключается в том, что, когда зарегистрированный пользователь получает доступ к jobs.edit.blade.php и передает (флажки не отображаются), все логические значения в базе данныхстановится нулем

Как мне избежать этой ситуации

jobs.edit.blade.php

@can ('isAccountant')
<div class="row">
  <div id="status">
     @if ($job->entered_status == '0')
      <input type="checkbox" name="entered_status" @if($job->entered_status) checked @endif> Entered <br><br>
     @elseif ($job->entered_status == '1')
      <input type="checkbox" name="entered_status" checked value="1" disabled> Entered <br><br>
      <input type='hidden' name='entered_status' value="1">
     @endif

    @if ($job->sales_status == '1')
      <input type="checkbox" name="despatch_status" checked value="1" disabled> All Despatches Completed <br><br>
      <input type="checkbox" name="invoice_status" checked value="1" disabled> All Invoices Completed
      <input type='hidden' name='despatch_status' value="1">
      <input type='hidden' name='invoice_status' value="1">
    @endif

    @if ($job->sales_status == '0' && $job->job_status == 'Completed' && $job->despatch_status == '0')
      <input type="checkbox" name="despatch_status" @if($job->despatch_status) checked @endif value="1"> All Despatches Completed <br><br>
    @endif

    @if ($job->sales_status == '0' && $job->job_status == 'Completed' && $job->despatch_status == '1')
      <input type="checkbox" name="despatch_status" checked value="1"> All Despatches Completed <br><br>
      <input type="checkbox" name="invoice_status" @if($job->invoice_status) checked @endif value="1"> All Invoices Completed <br><br>
    @endif
  </div>
</div>

@endcan

JobController.php

public function update(Request $request, $id)
    {


      $job = Job::find($id);
      $job->customer_name = $request->customer_name;
      $job->company_name = $request->company_name;
      $job->job_type = $request->job_type;
      $job->job_owner = $request->job_owner;
      $job->job_status = $request->job_status;
      $job->despatch_status = $request->has('despatch_status');
      $job->invoice_status = $request->has('invoice_status');
      if ($job->despatch_status == 1 && $job->invoice_status == 1) {
        $job->sales_status = 1;
      }
      $job->entered_status = $request->has('entered_status'); 

AuthServiceProvider.php

public function boot()
    {
        $this->registerPolicies();

        Gate::define('isAdmin', function ($user) {
          return $user->user_type == 'Admin';
        });

        Gate::define('isDirector', function ($user) {
          return $user->user_type == 'Director';
        });

        Gate::define('isProduction', function ($user) {
          return $user->user_type == 'Production';
        });

        Gate::define('isAccountant', function ($user) {
          return $user->user_type == 'Accountant';
        });


    }

Расширенная ошибка

_token  
"nzY5y8EW5yupkL3d6aL9bcpZRYmlc5YTN94ee1uI"
_method 
"PATCH"
id  
"10725"
customer_name   
""
company_name    
""
job_type    
"""
Item:\r\n
Qty:\r\n
Size:\r\n
Paper:\r\n
Print:\r\n
Each:\r\n
Total:
"""
job_owner   
"Sam"
job_status  
"Pending"
job_delivery_date   
""
job_delivery_time   
""
pk_pkl  
"PKL"
entered_status  
"on"

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Основываясь на комментариях к другому ответу, добавьте это к своему RouteServiceProvider:

public function boot()
{
    //

    parent::boot();

    if (!$this->app->runningInConsole()) {
        foreach (request()->all() as $key => $value) {
            if (is_string($value) && $value === 'on') {
                request()->offsetSet($key, true);
            }
        }
    }
}

Что это будет делать, это сканировать все входящие поля, и если они равны 'on', они преобразуются вtrue.

(причина, по которой мы добавляем это к поставщику услуг, а не к промежуточному программному обеспечению, основана на порядке выполнения)

0 голосов
/ 23 мая 2018

Причина этого заключается в том, что вы используете:

$job->despatch_status = $request->has('despatch_status')

$request->has('despatch_status') - true, если запрос имеет поле, и false, еслизапрос не имеет поле.

Код, который я могу порекомендовать:

Это будет despatch_status из запроса, если его true или false (или 1 / 0) он будет передан $job->despatch_status.

Но если despatch_status не присутствует в запросе, ->get() вернетсяnull, поэтому оператор ?? будет читать значение, уже находящееся в базе данных, поэтому оно не изменится.

$job->despatch_status = $request->get('despatch_status') ?? $job->despatch_status;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...