Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »


 
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.
OWNER_READ, OWNER_WRITE, OWNER_CREATE, OWNER_EXECUTE, OWNER_DELETE
GROUP_READ, GROUP_WRITE, GROUP_CREATE, GROUP_EXECUTE, GROUP_DELETE
PUBLIC_READ, PUBLIC_WRITE, PUBLIC_CREATE, PUBLIC_EXECUTE, PUBLIC_DELETE
 
If no access shall be set at all for either owner, group owner or public, use the symbols below
OWNER_NONE, GROUP_NONE, PUBLIC_NONE

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); 
. . .

  • No labels