2017-03-01 3 views
-1

J'ai une application qui a deux domaine modèle Organisation et TicketQuestion. assermentée utilisateur veut créer un billet qui ont une propriété d'organisation pour résoudre ce chaque permis d'utilisateur à une organisation comme ceci:Autoriser l'objet en utilisant la sécurité de printemps?

User1 permis à Organisation1

Utilisateur2 permis à Organisation2

TicketController.java ont sauver méthode qui crée un ticket. J'ai cette vulnérabilité: User1 peut invoquer la méthode avec ticket qui ont Organization2 (cette dose n'a pas la permission). J'utilise le filtre Hibernate pour autoriser les données dans les méthodes GET mais je ne sais pas comment puis-je protéger les données que l'utilisateur veut conserver et ne pas avoir la permission?

/ticket/save 

{ 
    id:-1, 
    organization:{ 
    id:2, 
    title:'organization2' //not allowed this organization 
    } 
} 


@Entity 
@Table(name = "core_organization_structure") 
public class OrganizationStructure { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @Column(name = "title", nullable = false) 
    private String title; 
} 

@Entity 
@Table(name = "core_Ticket") 
public class Ticket { 


    ..some prop 

    @ManyToOne 
    @JoinColumn(name = "org_id", nullable = false) 
    private OrganizationStructure org; 
} 

Répondre

0

Lorsque le formulaire est soumis, vous devez charger les autorisations de l'utilisateur authentifié et vérifier qu'ils sont autorisés à exécuter l'action qu'ils tentent d'accomplir.

Si l'utilisateur tente de créer un ticket pour une organisation à laquelle il n'a pas d'autorisation; ne pas persister l'enregistrement, et le gérer de manière appropriée. (Lancez une exception, renvoyez un 401, etc ...)

+0

oui l'une des solutions de base est celle-là. Imaginez que j'ai le modèle de domaine qui ont 10 propriétés qui ont tous ce problème. J'écris le code pour le chargement de chaque propriété?! un autre problème: j'ai ajouter la méthode de mise à jour et supprimer et peut-être avoir plus que cette méthode 3, un autre problème est que si l'organisation utilisée dans 100 domaine modèle écrit ce code 100 fois, je veux résoudre le problème en dehors de mon service. –