/** * Checks permissions on a variable number of targets.This is provided as an extension to Seam's * single target permission capabilities. * * @param action The permission action. * @param targets Targets for permissions. * @throws NotLoggedInException if not authorised and not logged in * @throws org.zanata.exception.AuthorizationException if logged in but not authorised */ public void checkPermission(String action, Object... targets) { try { internalCheckPermission(MultiTargetList.fromTargets(targets), action); } catch (AuthorizationException exception) { // try to produce a better than default error message List<String> meaningfulTargets = Lists.newArrayList(); for (Object target : targets) { if (target instanceof HasUserFriendlyToString) { String targetString = ((HasUserFriendlyToString) target).userFriendlyToString(); meaningfulTargets.add(targetString); } else { log.warn( "target [{}] may not have user friendly string representation", target.getClass()); meaningfulTargets.add(target.toString()); } } throw new AuthorizationException( String.format( "Failed to obtain permission('%s') with following facts(%s)", action, meaningfulTargets)); } }
/** * Indicates if the user has permission to perform an action on a variable number of targets. This * is provided as an extension to Seam's single target permission capabilities. * * @param action The permission action. * @param targets Targets for permissions. */ public boolean hasPermissionWithAnyTargets(String action, Object... targets) { return hasPermission(MultiTargetList.fromTargets(targets), action); }