Que dica você daria quando por exemplo um usuário não pode ter acesso a uma objeto X?
Por exemplo:
URL: /aluno/{id}
O usuário que é DIRETOR de uma escola tem acesso ao perfil de todos os alunos da escola que ele é diretor
O usuário que é PROFESSOR de uma escola tem acesso ao perfil de todos os alunos das turmas que ele leciona
então como eu faria isso utilizando o SpringSecurity?
Mais uma coisa
Eu tenho uma tela onde faço busca por alunos, aquela famosa tela onde existem diversos filtros, paginacao e etc.
Ali eu tambem queria fazer algo parecido com o requisito acima (da URL).
Eu iria querer que na tela de busca quando o usuário fosse um professor, na lista aparecesse somente os alunos
das turmas que ele leciona e quando diretor da escola que ele dirige. Eu pensei numa forma interessante, mas não sei
como injetar a implementacao correta no momento da criação do Controller MVC.
Exemplo:
public interface AlunoRepository {
public List<Aluno> getAlunoByParams(Map<String, Object> params, int offset, int size);
}
e as implementações
repository especifico pra professor
public class AlunoRepositoryImpl4Professor implements AlunoRepository {
public List<Aluno> getAlunoByParams(Map<String, Object> params, int offset, int size){
return // retorna uma lista somente dos alunos das turmas que ele seleciona de acordo com os parametros
}
}
repository especifico pra diretor
public class AlunoRepositoryImpl4Diretor implements AlunoRepository {
public List<Aluno> getAlunoByParams(Map<String, Object> params, int offset, int size){
return // retorna uma lista somente dos alunos da escola que ele dirige de acordo com os parametros
}
}
e o Controller
@Controller
public class AlunoController {
@AutoWired
private AlunoRepository repository; // como injetar o AlunoRepository de acordo com o perfil que esta sendo utilizado aqui?
@GET
public List<Alunos> query(Map<String, Object> params, int offset, int size){
return repository.getAlunoByParams(params, offset, size);
}
}
Como injetar o repository correto ali dentro do Controller?
PS - ignorar possiveis erros na escrita do código, servem apenas pra dar ideia do que eu pretendo fazer