Sets a full 15bit protection code on a protected instance in a remote EDMdatabase.
When a protected instance is created, the default protection code is set according to default values that are set as configuration parameters in the remote EDMdatabase.. These default settings may be changed by the owner/administrators of the protected instance or by the superuser.
Related functions: edmiRemoteCheckInstanceAccess, edmiRemoteGetInstanceAccessRights, edmiRemoteDefineAccessRights, edmiRemoteDeleteAccessRights, edmiRemoteChangeInstanceOwner.
Header:
#include "sdai.h"
Prototype:
EdmiError edmiRemoteProtectInstance(SdaiServerContext serverContextId,
SdaiAppInstance currInst,
SdaiUnsignedInt protection,
SdaiInvocationId *edmiInvocationId);
Arguments:
serverContextId |
Context identification, from edmiDefineServerContext |
currInst |
A numeric instanceID that uniquely identifies a protected instance for which the protection code Shall be set. This instanceId may represent any protected object in the remote EDMdatabase such as models, repositories, schemas and containers. |
protection |
Specifies the protection to be set for the specified protected instance. The value should be a bitwise OR of any combination of the symbols listed below. |
edmiInvocationId |
Currently not used. |
Returns:
A completion code of datatype EdmiError is the returned function value. The completion code has the following values:
Completion code = 0 : Operation successfully performed.
Completion code != 0: Error in operation. Completion code is an _EDMinterface_ error code. Use edmiGetErrorText to get the error text corresponding to the error code.
Example:
EdmiError rstat;
SdaiInstance instId;
SdaiServerContext myContext;
SdaiRepository repId;
SdaiModel modId;
SdaiInstance userId, directorId;
SdaiBoolean gotAccess;
SdaiInteger accessRole, protCode, accRights;
/* Define Remote Server Context */
rstat = edmiDefineServerContext("MyRemoteServerContext",
"Superuser", NULL, "cf37ftr",
"TCP", "9090", "MyServerHost",
NULL, NULL, NULL, NULL, NULL, &myContext);
/* Check if Johnny got access */
rstat = edmiRemoteGetRepository(myContext, "StaffRepository",
&repId, NULL);
rstat = edmiRemoteGetUser(myContext, "Johnny", &userId, NULL);
rstat = edmiRemoteCheckInstanceAccess(myContext, repId, 0,
(WRITE_ACCESS|CREATE_ACCESS), userId, 0, 0,
&gotAccess, &instId, &accessRole,
&protCode, &accRights, NULL);
/* Check if access may be granted */
if (gotAccess != sdaiTRUE) {
/* Check if Johnny was individually excluded */
if (accessRole == ACCESS_FOR_USER) {
printf("\nSorry Johnny has already been excluded.");
goto err;
} else if (accessRole != PUBLIC_ACCESS) {
printf("\nJohnny is owner or administrator.");
printf("\nIndividual access rights will have no effect.");
goto err;
} else {
/* Grant access to Johnny on the StaffRepository */
rstat = edmiRemoteDefineAccessRights(myContext, repId,
userId, (WRITE_ACCESS|CREATE_ACCESS), NULL);
}
}
/* Create Johnnys Hour List Model */
rstat = edmiRemoteCreateModel(myContext, "StaffRepository",
"JohnnysHourList", "HOUR_LIST_SCHEMA", 0, NULL);
rstat = edmiRemoteGetModel(myContext, repId,
"JohnnysHourList", &modId, NULL);
/* Change ownership */
rstat = edmiRemoteChangeInstanceOwner(myContext, modId,
userId, (SET_OWNER|REPLACE_CURRENT), NULL);
/* Set protection */
rstat = edmiRemoteProtectInstance(myContext, modId,
(GROUP_NONE|PUBLIC_NONE|OWNER_CREATE|
OWNER_DELETE|OWNER_WRITE), NULL);
/* Grant read access to director */
rstat = edmiRemoteGetUser(myContext, "Director", &directorId, NULL);
rstat = edmiRemoteDefineAccessRights(myContext, modId,
directorId, READ_ACCESS, NULL);
. . .