This page describes the FunctionalItemPermission and how it could be used to specify the access to Functional Items and their members.
Overview
FunctionalItemPermission represents the access to FunctionalItem instances and their functionality. It is used for defining:
Examples for using in permissions.perm file:
com.prosyst.mbs.services.fim.FunctionalItemPermission "*" ""
com.prosyst.mbs.services.fim.FunctionalItemPermission "(access=READ) ""
com.prosyst.mbs.services.fim.FunctionalItemPermission "(&(access=EXEC)(member=getParentGroups)(uid=fim:group:admin)) ""
com.prosyst.mbs.services.fim.FunctionalItemPermission "(&(access=EXEC)(objectClass=com.prosyst.mbs.services.fim.groups.*))) ""
com.prosyst.mbs.services.fim.FunctionalItemPermission "(&(lifecycle=REGISTER)(!(objectClass=com.prosyst.mbs.services.fim.groups.*))) ""
Changing permissions runtime:
PermissionInfo itemGetPerm = new PermissionInfo(FunctionalItemPermission.class.getName(), '('
+ FunctionalItemPermission.LIFECYCLE_TYPE_KEY
+ '=' + FunctionalItemPermission.LIFECYCLE_TYPE_VALUE_GET + ')', null);
PermissionInfo removePerm = new PermissionInfo(FunctionalItemPermission.class.getName(), "(&("
+ FunctionalItemPermission.ACCESS_TYPE_KEY + '=' + FunctionalItemPermission.ACCESS_TYPE_VALUE_EXEC + ")("
+ MEMBER_KEY + "=remove))", null);
Examples on how to check the caller permissions in FunctionalItem property getters, setters and operations:
If you are extending AbstractFunctionalItem, there are more protected methods that can be used instead of the code examples listed down.
@Property
@Description("Switch state.")
String PROPERTY_STATE = "state";
...
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new FunctionalItemPermission(this, STATE_PROPERTY, FunctionalItemPermission.ACCESS_TYPE_VALUE_READ));
}
if (sm != null) {
sm.checkPermission(new FunctionalItemPermission(this, STATE_PROPERTY, FunctionalItemPermission.ACCESS_TYPE_VALUE_WRITE));
}
if (sm != null) {
sm.checkPermission(new FunctionalItemPermission(this, "toggle", FunctionalItemPermission.ACCESS_TYPE_VALUE_EXEC));
}
FIM packages permissions:
In addition to the configured FunctionalItemPermissions be sure that import PackagePermissions for FIM packages are allowed only for the required FIM API packages.