Executando verificação de segurança...
3

Sim, utilizo o id do model, mas faço validações no método para garantir a segurança.

// Rota de usuários - (index, show, create, store, edit, update e destroy)
Route::resource('usuarios', UsuarioController::class)->middleware(['auth']);

// método edit
public function edit(Usuario $usuario){
    // usuário não pertence ao mesmo tenant -> retorno erro e passo uma mensagem diferente de forbidden pra não chamar atenção
    abort_if($usuario->tenant_id !== auth()->user()->tenant_id, 403, 'Página não encontrada');
    
    // carrega a view com os dados do usuário
    return view('view-edit', compact('usuario'));
}

// método update
public function update(Request $request, Usuario $usuario){
    // $request -> tenho acesso a tudo do request
    // $usuario -> tenho acesso ao model do usuario que foi passado por parâmetro
    // posso validar diversas coisas aqui sobre esse usuário para garantir a segurança
    
    // exemplo: acesso negado se o usuário acessado pertence a um tenant diferente
    abort_if($usuario->tenant_id !== auth()->user()->tenant_id, 403);
}

Normalmente no lugar do Request eu crio uma classe Form Request separada para cuidar só do request e o código ficar mais limpo e organizado, mas coloquei dessa forma para facilitar o entendimento.

A rota gerada fica assim: https://dominio.com.br/usuarios/id

Dentro do método update você pode realizar validações como o exemplo fornecido, aí vai da sua regra de negócio, o quê deseja fazer.

O exemplo acima poderia se tratar de um usuário administrador que tem acesso ao gerenciamento de usuários do sistema, mas ele tenta acessar um id na url que não pertence ao tenant dele. Dessa forma o sistema irá abortar a requisição e gerar um acesso negado.

Carregando publicação patrocinada...
1