use of org.apache.shiro.authz.Permission in project ddf by codice.
the class XacmlPdpTest method generateSubjectInfo.
private AuthorizationInfo generateSubjectInfo(String country) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
Set<Permission> permissions = new HashSet<Permission>();
Set<String> roles = new HashSet<String>();
// add roles
roles.add("users");
roles.add("admin");
// add permissions
KeyValuePermission citizenshipPermission = new KeyValuePermission(COUNTRY);
citizenshipPermission.addValue(country);
permissions.add(citizenshipPermission);
KeyValuePermission typePermission = new KeyValuePermission(SUBJECT_ACCESS);
typePermission.addValue(ACCESS_TYPE_A);
typePermission.addValue(ACCESS_TYPE_B);
KeyValuePermission nameIdentPermission = new KeyValuePermission(NAME_IDENTIFIER);
nameIdentPermission.addValue("testuser1");
KeyValuePermission givenNamePermission = new KeyValuePermission(GIVEN_NAME);
givenNamePermission.addValue("Test User");
permissions.add(typePermission);
permissions.add(nameIdentPermission);
permissions.add(givenNamePermission);
info.setRoles(roles);
info.setObjectPermissions(permissions);
return info;
}
use of org.apache.shiro.authz.Permission in project ddf by codice.
the class XacmlPdpTest method testActionGoodSiteName.
@Test
public void testActionGoodSiteName() {
SimpleAuthorizationInfo blankUserInfo = new SimpleAuthorizationInfo(new HashSet<String>());
blankUserInfo.setObjectPermissions(new HashSet<Permission>());
RequestType request = testRealm.createXACMLRequest(USER_NAME, blankUserInfo, new KeyValueCollectionPermission(SITE_NAME_ACTION));
assertTrue(testRealm.isPermitted(request));
}
use of org.apache.shiro.authz.Permission in project ddf by codice.
the class CollectionPermission method toString.
/**
* String representation of this collection of permissions. Depends on the toString method of
* each permission.
*
* @return String representation of this collection of permissions
*/
public String toString() {
StringBuilder sb = new StringBuilder();
for (Permission perm : permissionList) {
sb.append('[');
sb.append(perm.toString());
sb.append("] ");
}
return sb.toString();
}
use of org.apache.shiro.authz.Permission in project ddf by codice.
the class AuthzRealmTest method testIsPermittedOneMultiple.
@Test
public void testIsPermittedOneMultiple() throws PdpException {
permissionList.clear();
KeyValuePermission kvp = new KeyValuePermission("country", Arrays.asList("AUS", "CAN", "GBR"));
permissionList.add(kvp);
String ruleClaim = "FineAccessControls";
String countryClaim = "CountryOfAffiliation";
// create a new user here with multiple country permissions to test
List<Permission> permissions = new ArrayList<Permission>();
KeyValuePermission rulePermission = new KeyValuePermission(ruleClaim);
rulePermission.addValue("A");
rulePermission.addValue("B");
permissions.add(rulePermission);
KeyValuePermission countryPermission = new KeyValuePermission(countryClaim);
countryPermission.addValue("USA");
countryPermission.addValue("AUS");
permissions.add(countryPermission);
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
authorizationInfo.addObjectPermission(rulePermission);
authorizationInfo.addObjectPermission(countryPermission);
authorizationInfo.addRole("admin");
AuthzRealm testRealm = new AuthzRealm("src/test/resources/policies", new XmlParser()) {
@Override
public AuthorizationInfo getAuthorizationInfo(PrincipalCollection principals) {
return authorizationInfo;
}
};
testRealm.setMatchOneMappings(Arrays.asList("CountryOfAffiliation=country"));
testRealm.setMatchAllMappings(Arrays.asList("FineAccessControls=rule"));
testRealm.setRolePermissionResolver(roleString -> Arrays.asList(new KeyValuePermission("role", Arrays.asList(roleString))));
boolean[] permittedArray = testRealm.isPermitted(mockSubjectPrincipal, permissionList);
for (boolean permitted : permittedArray) {
Assert.assertEquals(true, permitted);
}
}
use of org.apache.shiro.authz.Permission in project ddf by codice.
the class AdminConfigPolicy method isPermittedMatchOne.
@Override
public KeyValueCollectionPermission isPermittedMatchOne(CollectionPermission subjectAllCollection, KeyValueCollectionPermission matchOneCollection) {
if (matchOneCollection.getAction() == null || (!matchOneCollection.getAction().equals(VIEW_FEATURE_ACTION) && !matchOneCollection.getAction().equals(VIEW_SERVICE_ACTION))) {
return matchOneCollection;
}
List<Permission> newMatchOneCollectionPermissions = new ArrayList<>(matchOneCollection.getPermissionList());
for (Permission permission : matchOneCollection.getPermissionList()) {
if (!(permission instanceof KeyValuePermission)) {
continue;
}
String matchPermissionName = ((KeyValuePermission) permission).getKey();
Map<String, List<KeyValueCollectionPermission>> policyPermissions;
if (matchPermissionName.equals(FEATURE_NAME)) {
policyPermissions = featurePolicyPermissions;
} else if (matchPermissionName.equals(SERVICE_PID)) {
policyPermissions = servicePolicyPermissions;
} else {
continue;
}
Set<String> valuesToMatch = new HashSet<>();
valuesToMatch.addAll(((KeyValuePermission) permission).getValues());
//If there are multiple features in the permission and one is not authorized, the user is not authorized to see any of the features in the group
for (String matchPermissionValue : ((KeyValuePermission) permission).getValues()) {
List<KeyValueCollectionPermission> matchOneAttributes = policyPermissions.get(matchPermissionValue);
//If null, there is no configuration with this attribute in the policy, the feature or service is white listed
if (matchOneAttributes == null) {
valuesToMatch.remove(matchPermissionValue);
} else {
for (KeyValueCollectionPermission attributePermissions : matchOneAttributes) {
if (subjectAllCollection.implies(attributePermissions)) {
valuesToMatch.remove(matchPermissionValue);
break;
}
}
}
}
if (valuesToMatch.isEmpty()) {
newMatchOneCollectionPermissions.remove(permission);
}
}
return new KeyValueCollectionPermission(matchOneCollection.getAction(), newMatchOneCollectionPermissions.stream().toArray(KeyValuePermission[]::new));
}
Aggregations