public static boolean isAnnotatedAny(Class<?> clazz, Collection<Class<? extends Annotation>> annotations) { clazz = Cls.unproxy(clazz); for (Class<? extends Annotation> ann : annotations) { if (clazz.isAnnotationPresent(ann)) { return true; } } return false; }
public static String entityName(Class<?> cls) { return Cls.unproxy(cls).getSimpleName(); }
public static <T extends Annotation> T getAnnotationRecursive(Class<?> clazz, Class<T> annotationClass) { clazz = Cls.unproxy(clazz); for (Class<?> c = clazz; c.getSuperclass() != null; c = c.getSuperclass()) { T ann = c.getAnnotation(annotationClass); if (ann != null) { return ann; } } return null; }
public static Map<Class<?>, Annotation> classAnnotations(Class<?> clazz) { clazz = Cls.unproxy(clazz); Map<Class<?>, Annotation> annotations = U.map(); for (Annotation ann : clazz.getAnnotations()) { annotations.put(ann.annotationType(), ann); } return annotations; }
@SuppressWarnings("unchecked") public static <T extends Annotation> T propAnnotation(Class<?> clazz, String property, Class<T> annotationClass) { clazz = Cls.unproxy(clazz); return (T) propAnnotations(clazz, property).get(annotationClass); }
public static boolean hasAnyRole(String username, Set<String> roles, Set<String> targetRoles, Class<?> clazz, Object target) { clazz = Cls.unproxy(clazz); for (String role : targetRoles) { if (hasRole(username, roles, role, clazz, target)) { return true; } } return false; }
@SuppressWarnings("unchecked") public static <T extends Annotation> T classAnnotation(Class<?> clazz, Class<T> annotationClass) { clazz = Cls.unproxy(clazz); return (T) classAnnotations(clazz).get(annotationClass); }
public static boolean isAnnotated(Class<?> clazz, Class<? extends Annotation> annotation) { clazz = Cls.unproxy(clazz); return classAnnotations(clazz).containsKey(annotation); }
public static boolean hasRoleForRecord(String username, Set<String> roles, String role, Object record) { return hasRole(username, roles, role, Cls.unproxy(record.getClass()), record); }
public static boolean hasRoleForClass(String username, Set<String> roles, String role, Class<?> clazz) { return hasRole(username, roles, role, Cls.unproxy(clazz), null); }
public static boolean hasRoleBasedObjectAccess(String username, Set<String> roles, Object target) { U.notNull(target, "target"); return hasRoleBasedAccess(username, roles, Cls.unproxy(target.getClass()), target); }
public static boolean hasRoleBasedClassAccess(String username, Set<String> roles, Class<?> clazz) { U.notNull(clazz, "class"); clazz = Cls.unproxy(clazz); return hasRoleBasedAccess(username, roles, clazz, null); }
public static Map<Class<?>, Annotation> propAnnotations(Class<?> clazz, String property) { clazz = Cls.unproxy(clazz); Map<Class<?>, Annotation> annotations = U.map(); Prop prop = Beany.property(clazz, property, false); if (prop != null) { for (Annotation ann : prop.getDeclaringType().getAnnotations()) { annotations.put(ann.annotationType(), ann); } for (Annotation ann : prop.getAnnotations()) { annotations.put(ann.annotationType(), ann); } } return annotations; }
private static boolean hasRoleBasedAccess(String username, Set<String> roles, Class<?> clazz, Object target) { clazz = Cls.unproxy(clazz); Set<String> rolesAllowed = getRolesAllowed(clazz); return U.isEmpty(rolesAllowed) || hasAnyRole(username, roles, rolesAllowed, clazz, target); }
public static boolean canAccessClass(String username, Set<String> roles, Class<?> clazz) { U.notNull(clazz, "class"); clazz = Cls.unproxy(clazz); return hasRoleBasedClassAccess(username, roles, clazz) && canAccessClass(username, clazz); }
public static String beanToNiceText(Object bean, boolean allowCustom) { Class<?> clazz = Cls.unproxy(bean.getClass());
public static String beanToStr(Object bean, boolean allowCustom) { Class<?> clazz = Cls.unproxy(bean.getClass());
public static DataPermissions getObjectPermissions(String username, Set<String> roles, Object target) { U.notNull(target, "target"); Class<?> clazz = target.getClass(); clazz = Cls.unproxy(clazz); if (Collection.class.isAssignableFrom(clazz) || Map.class.isAssignableFrom(clazz) || Object[].class.isAssignableFrom(clazz)) { return DataPermissions.ALL; } if (!hasRoleBasedAccess(username, roles, clazz, null)) { return DataPermissions.NONE; } CanRead canRead = Metadata.classAnnotation(clazz, CanRead.class); CanInsert canInsert = Metadata.classAnnotation(clazz, CanInsert.class); CanChange canChange = Metadata.classAnnotation(clazz, CanChange.class); CanDelete canDelete = Metadata.classAnnotation(clazz, CanDelete.class); CanManage canManage = Metadata.classAnnotation(clazz, CanManage.class); if (canRead == null && canInsert == null && canChange == null && canDelete == null && canManage == null) { return DataPermissions.ALL; } boolean read = canRead == null || hasAnyRole(username, roles, roles(canRead.value()), clazz, target); boolean insert = canInsert != null && hasAnyRole(username, roles, roles(canInsert.value()), clazz, target); boolean change = canChange != null && hasAnyRole(username, roles, roles(canChange.value()), clazz, target); boolean delete = canDelete != null && hasAnyRole(username, roles, roles(canDelete.value()), clazz, target); boolean manage = canManage != null && hasAnyRole(username, roles, roles(canManage.value()), clazz, target); insert |= manage; change |= manage; delete |= manage; return DataPermissions.from(read, insert, change, delete); }
public static DataPermissions getClassPermissions(String username, Set<String> roles, Class<?> clazz) { U.notNull(clazz, "class"); clazz = Cls.unproxy(clazz); if (Collection.class.isAssignableFrom(clazz) || Map.class.isAssignableFrom(clazz) || Object[].class.isAssignableFrom(clazz)) { return DataPermissions.ALL; } if (!hasRoleBasedAccess(username, roles, clazz, null)) { return DataPermissions.NONE; } CanRead canRead = Metadata.classAnnotation(clazz, CanRead.class); CanInsert canInsert = Metadata.classAnnotation(clazz, CanInsert.class); CanChange canChange = Metadata.classAnnotation(clazz, CanChange.class); CanDelete canDelete = Metadata.classAnnotation(clazz, CanDelete.class); CanManage canManage = Metadata.classAnnotation(clazz, CanManage.class); if (canRead == null && canInsert == null && canChange == null && canDelete == null && canManage == null) { return DataPermissions.ALL; } boolean read = canRead == null || hasAnyRole(username, roles, roles(canRead.value()), clazz, null); boolean insert = canInsert != null && hasAnyRole(username, roles, roles(canInsert.value()), clazz, null); boolean change = canChange != null && hasAnyRole(username, roles, roles(canChange.value()), clazz, null); boolean delete = canDelete != null && hasAnyRole(username, roles, roles(canDelete.value()), clazz, null); boolean manage = canManage != null && hasAnyRole(username, roles, roles(canManage.value()), clazz, null); insert |= manage; change |= manage; delete |= manage; return DataPermissions.from(read, insert, change, delete); }
public static DataPermissions getPropertyPermissions(String username, Set<String> roles, Class<?> clazz, Object target, String propertyName) { U.notNull(clazz, "class"); clazz = Cls.unproxy(clazz); if (Collection.class.isAssignableFrom(clazz) || Map.class.isAssignableFrom(clazz) || Object[].class.isAssignableFrom(clazz)) { return DataPermissions.ALL; } if (!hasRoleBasedAccess(username, roles, clazz, target)) { return DataPermissions.NONE; } CanRead canRead = Metadata.propAnnotation(clazz, propertyName, CanRead.class); CanInsert canInsert = Metadata.propAnnotation(clazz, propertyName, CanInsert.class); CanChange canChange = Metadata.propAnnotation(clazz, propertyName, CanChange.class); CanDelete canDelete = Metadata.propAnnotation(clazz, propertyName, CanDelete.class); CanManage canManage = Metadata.propAnnotation(clazz, propertyName, CanManage.class); if (canRead == null && canInsert == null && canChange == null && canDelete == null && canManage == null) { return DataPermissions.ALL; } boolean read = canRead == null || hasAnyRole(username, roles, roles(canRead.value()), clazz, target); boolean insert = canInsert != null && hasAnyRole(username, roles, roles(canInsert.value()), clazz, target); boolean change = canChange != null && hasAnyRole(username, roles, roles(canChange.value()), clazz, target); boolean delete = canDelete != null && hasAnyRole(username, roles, roles(canDelete.value()), clazz, target); boolean manage = canManage != null && hasAnyRole(username, roles, roles(canManage.value()), clazz, target); insert |= manage; change |= manage; delete |= manage; return DataPermissions.from(read, insert, change, delete); }