Как управлять иерархией разрешения ресурсов? - PullRequest
0 голосов
/ 25 мая 2019

Я создаю пользовательское веб-приложение, здесь у меня есть функция обозначений, каждый сотрудник будет иметь обозначение (вот пример моего обозначения https://prnt.sc/nt3ioj)

Мое требование - показать здесь:

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

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

  3. У технического менеджера будет доступ только к его ресурсам, поскольку у него нет дочерних обозначений
  4. и т. Д. *

Мне нужно оптимизированное решение этой проблемы.

Спасибо заранее

1 Ответ

0 голосов
/ 25 мая 2019

У меня был похожий сценарий на одном из моих проектов.Что я сделал, так это создал Laravel Middelware, который дал мне идентификаторы меня и моих детей с помощью рекурсивной функции.

Вот код для моего файла Middleware

namespace App\Http\Middleware;

use Auth;
use Closure;
use App\Models\Nomina\Empleado;

class Subordinados
{
    protected $subordinates = [];

    public function handle($request, Closure $next)
    {
        $this->recursiveSearch(Auth::id());
        $request->request->add(['subordinados' => $this->subordinates]);
        return $next($request);
    }

    private function recursiveSearch($aUserId)
    {
        $empleados = Empleado::where('superiorid', $aUserId)->select('empleadoid')->get();
        foreach ($empleados as $empleado) {
            $this->recursiveSearch($empleado->empleadoid);
            $this->subordinates[] = $empleado->empleadoid;
        }
    }
}

При добавлении этогопромежуточное программное обеспечение для маршрута, я смог бы сделать что-то вроде этого на моем контроллере:

function index(Request $request) {
    Empleado::whereIn('empleadoid', $request->subordinados);
}

, который будет показывать только идентификаторы меня и моих детей.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...