/* * Copyright (C) 2015 Stefano Fornari. * All Rights Reserved. No use, copying or distribution of this * work may be made except in accordance with a valid license * agreement from Stefano Fornari. This notice must be * included on all copies, modifications and derivatives of this * work. * * STEFANO FORNARI MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO * THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE, OR NON-INFRINGEMENT. STEFANO FORNARI SHALL NOT BE LIABLE FOR ANY * DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING * THIS SOFTWARE OR ITS DERIVATIVES. */ package ste.web.acl; import java.security.AccessControlException; import java.util.HashSet; import java.util.Set; /** * * Not thread safe * */ public class AccessControlList { Set<String> permissions = new HashSet<>(); public AccessControlList add(final String permission) { permissions.add(permission); return this; } public Set<String> getPermissions() { return permissions; } public void check(final Set<String> permissions) throws AccessControlException { if (permissions == null) { throw new AccessControlException("no permissions given"); } if (this.permissions.isEmpty()) { throw new AccessControlException("no allowed permissions"); } if (permissions.isEmpty() || !containsAll(permissions)) { throw new AccessControlException("given permissions " + permissions + " miss some of " + this.permissions); } } // --------------------------------------------------------- private methods private boolean containsAll(final Set<String> permissions) { for(String p: this.permissions) { if (!contains(permissions, p)) { return false; } } return true; } private boolean contains(final Set<String> permissions, final String toCheck) { for(String p: permissions) { if (p.matches(toCheck)) { return true; } } return false; } }