blob: f000375ff6dbc45bdab21d4183f878fdfc0823b2 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.v23.services.groups;
import io.v.v23.context.VContext;
import io.v.v23.security.Authorizer;
import io.v.v23.security.Call;
import io.v.v23.security.access.Permissions;
import io.v.v23.vdl.Types;
import io.v.v23.vdl.VdlType;
import io.v.v23.verror.VException;
import java.lang.reflect.Type;
/**
* An authorizer that subscribes to an authorization policy where access is granted if
* the remote end presents blessings included in the Access Control Lists (ACLs) associated with
* the set of relevant tags.
* <p>
* This class handles authorization the same way as
* {@link io.v.v23.security.access.PermissionsAuthorizer}, except that it supports groups.
*/
public class PermissionsAuthorizer implements Authorizer {
private static native PermissionsAuthorizer nativeCreate(Permissions perms, VdlType type)
throws VException;
/**
* Creates a new {@link PermissionsAuthorizer} authorizer.
*
* @param perms ACLs containing authorization rules
* @param tagType type of the method tags that this authorizer checks
* @return a newly created authorizer
* @throws VException if the authorizer couldn't be created
*/
public static PermissionsAuthorizer create(Permissions perms, Type tagType) throws VException {
try {
VdlType type = Types.getVdlTypeFromReflect(tagType);
return nativeCreate(perms, type);
} catch (IllegalArgumentException e) {
throw new VException(String.format(
"Tag type %s does not have a corresponding VdlType: %s",
tagType, e.getMessage()));
}
}
private final long nativePtr;
private native void nativeAuthorize(long nativePtr, VContext ctx, Call call) throws VException;
private PermissionsAuthorizer(long nativePtr) {
this.nativePtr = nativePtr;
}
@Override
public void authorize(VContext ctx, Call call) throws VException {
nativeAuthorize(nativePtr, ctx, call);
}
}