controle de permissão com vraptor - qcon sp 2011

15
CONTROLE DE PERMISSÃO @wbotelhos | wbotelhos.com.br | #qconsp / 11 WASHINGTON BOTELHO

Upload: washington-botelho

Post on 11-May-2015

4.490 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Controle de Permissão com VRaptor - QCon SP 2011

CONTROLE DE PERMISSÃO

@wbotelhos | wbotelhos.com.br | #qconsp / 11

WASHINGTON BOTELHO

Page 2: Controle de Permissão com VRaptor - QCon SP 2011

public enum Perfil {

MEMBRO, MODERADOR, ADMINISTRADOR

}

public class Usuario {

private Long id; private String nome; private Perfil perfil;

}

Page 3: Controle de Permissão com VRaptor - QCon SP 2011

@Post("/usuario")public void salvar(Usuario usuario) {

}

@Resourcepublic class AdminController {

}

Page 4: Controle de Permissão com VRaptor - QCon SP 2011

Annotation

@Permission(Perfil.ADMINISTRADOR)

Page 5: Controle de Permissão com VRaptor - QCon SP 2011

public @interface Permission { Perfil[] value();}

Page 6: Controle de Permissão com VRaptor - QCon SP 2011

public @interface Permission { Perfil[] value();}

@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.TYPE, ElementType.METHOD })

Page 7: Controle de Permissão com VRaptor - QCon SP 2011

@Post("/usuario")public void salvar(Usuario usuario) {

}

@Permission({ Perfil.MODERADOR, Perfil.ADMINISTRADOR })

@Resourcepublic class AdminController {

}

@Permission(Perfil.ADMINISTRADOR)

Page 8: Controle de Permissão com VRaptor - QCon SP 2011

Interceptor

@Intercepts

Page 9: Controle de Permissão com VRaptor - QCon SP 2011

accepts(){ true | false }

intercept(){ next | redirect | error }

Page 10: Controle de Permissão com VRaptor - QCon SP 2011

public boolean accepts(ResourceMethod method) {

return !method.getMethod().isAnnotationPresent(Public.class)

}

Page 11: Controle de Permissão com VRaptor - QCon SP 2011

public void intercept( InterceptorStack stack, ResourceMethod method, Object resource) {

Permission methodPermission =method.getMethod().getAnnotation(Permission.class);

Permission controllerPermission =method.getResource().getType().getAnnotation(Permission.class);

// ...

}

Page 12: Controle de Permissão com VRaptor - QCon SP 2011

private boolean hasAccess(Permission permission) {if (permission == null) return true;

Collection<Perfil> perfis = Arrays.asList(permission.value());

return perfis.contains(userSession.getUser().getPerfil());}

Page 13: Controle de Permissão com VRaptor - QCon SP 2011

if (hasAccess(methodPermission) && hasAccess(controllerPermission))

stack.next(method, resource);

else

result.redirectTo(UsuarioController.class).negado();

Page 14: Controle de Permissão com VRaptor - QCon SP 2011

result.use(http()).sendError(500, "Permission denied!");

Ajax Error

result.use(http()).sendError(404);

Not Found

Page 15: Controle de Permissão com VRaptor - QCon SP 2011

@wbotelhos | wbotelhos.com.br

WASHINGTON BOTELHO

Obrigado! (: