Como faria para um usuário de diferentes empresas não visualizarem informações uma da outra?

Estou filtrando os dados baseado em uma variável de sessão, até aí tudo certo, porém se o usuário alterar o id da url ele acaba conseguindo visualizar informações de outra empresa, como faria para evitar isso?

Exemplo: http://localhost:8000/salas/editar/1 se o cara alterar para http://localhost:8000/salas/editar/2 acaba vendo da outra empresa.

E você está usando qual variável de sessão pra filtrar o que em qual momento?

Pois veja digamos que o usuário 1 da empresa 1 ao se logar tenha na sessão dele o codigo_empresa = 1 e apenas a sala 1 seja dessa empresa, quando você passar a sala 2 na sua URL se ela não for da empresa 1 e ainda está aparecendo então você não está usando nada na sessão pra filtrar.

Consegue especificar melhor o que da sessão você está utilizando?

1 curtida

Quando eu logo no sistema eu crio uma variável de sessão com o código da empresa.

public function authenticated($request, $usuario){
    $user = Auth::user();
    $empresa = \DB::table("empresa_usuarios")
                         ->where('emp_codigo', $user->id)
                         ->first();
    if($empresa){
        session(['empresa_id' => $empresa->emp_codigo]); 
    } else {
        return redirect()->route('login', 'erro=1');
    }
}

aí toda vez que eu gravo um registro eu salvo o id da empresa no banco pra localizar os registros está funcionando.

public function show()
{ 
    //$ListaSalas = Sala::paginate(10);
    $ListaSalas = DB::table('salas') 
    ->select('sal_codigo','sal_descricao')
    ->where('emp_codigo', '=', session('empresa_id'))
    ->paginate(10);
   
    //->paginate(10);
    if(count($ListaSalas)==0){
        return redirect('/salas');
    } else {
        return view('ListaSalasLocal',compact('ListaSalas'));
    }   
}

porém o problema é se por acaso um usuário mal intencionado alterar os parâmetros da url.

eu estou pensando em redirecionar o usuário para outra página caso ele tente acessar um registro q não pertence a empresa dele.

Estude sobre:

O Middleware é uma pilha de execução antes de você chegar o seu controller e com ela você consegue barrar a entrada em url que não são permitidas para visualização de usuários sem autorização

O Global Scope vai te ajudar a filtrar somente os dados que você precisa visualizar e consequentemente as outras operações.

Chegou o momento ideal, chegou a hora, chegou o seu vencer, estude o Framework, porque esse diferente de muitos tem todas essas soluções muitos fáceis de implementar.

Se não estudar fica complicado resolver essa questão e outro porém é muito difícil resolver sem ter o seu código na totalidade são passos a se chegar e você precisa entender isso.

1 curtida

vou estudar sobre isso. obrigado!
qd tiver funcionando eu dou um retorno.