Groepen gebruikers definiëren in C++
In Authorization Manager vertegenwoordigt een IAzApplicationGroup-object een groep gebruikers. Rollen kunnen vervolgens gezamenlijk worden toegewezen aan deze groep gebruikers. Een IAzApplicationGroup--object kan ook andere IAzApplicationGroup objecten als leden bevatten. Zie Gebruikers en groepenvoor meer informatie over toepassingsgroepen.
Een groep kan worden gedefinieerd door expliciete lijsten met leden en niet-leden, of door een Ldap-query (Lightweight Directory Access Protocol). In de volgende voorbeelden ziet u hoe u elk type toepassingsgroep maakt:
Een basisgroep maken
Een basistoepassingsgroep wordt gedefinieerd door de leden die zijn opgenomen in de leden en niet-leden eigenschappen van het IAzApplicationGroup-object dat de groep vertegenwoordigt. Gebruikers en groepen die worden vermeld in de eigenschap Leden zijn opgenomen in de toepassingsgroep en gebruikers en groepen die worden vermeld in de eigenschap Niet-leden worden uitgesloten van de toepassingsgroep. Het opgenomen zijn in de eigenschap Niet-leden heeft voorrang boven het opgenomen zijn in de eigenschap Leden.
In het volgende voorbeeld ziet u hoe u een basistoepassingsgroep maakt en alle lokale gebruikers toevoegt als leden van die groep. In het voorbeeld wordt ervan uitgegaan dat er een bestaand XML-beleidsarchief is met de naam MyStore.xml in de hoofdmap van station C.
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
#pragma comment(lib, "duser.lib")
#include <windows.h>
#include <stdio.h>
#include <azroles.h>
#include <objbase.h>
void main(void){
IAzAuthorizationStore* pStore = NULL;
IAzApplicationGroup* pAppGroup = NULL;
HRESULT hr;
void MyHandleError(char *s);
BSTR storeName = NULL;
BSTR groupName = NULL;
BSTR sidString = NULL;
// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize COM.");
// Create the AzAuthorizationStore object.
hr = CoCreateInstance(
/*"b2bcff59-a757-4b0b-a1bc-ea69981da69e"*/
__uuidof(AzAuthorizationStore),
NULL,
CLSCTX_ALL,
/*"edbd9ca9-9b82-4f6a-9e8b-98301e450f14"*/
__uuidof(IAzAuthorizationStore),
(void**)&pStore);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create AzAuthorizationStore object.");
// Create null VARIANT for parameters.
VARIANT myVar;
VariantInit(&myVar);
// Allocate a string for the name of the store.
if(!(storeName = SysAllocString(L"msxml://c:\\MyStore.xml")))
MyHandleError("Could not allocate string.");
// Initialize the store.
hr = pStore->Initialize(AZ_AZSTORE_FLAG_MANAGE_STORE_ONLY,
storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Create an application group object.
if (!(groupName = SysAllocString(L"Trusted Users")))
MyHandleError("Could not allocate group name string");
hr = pStore->CreateApplicationGroup(groupName, myVar, &pAppGroup);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create application group.");
// Add well-known SID for all local users to the group.
if (!(sidString = SysAllocString(L"S-1-2-0")))
MyHandleError("Could not allocate SID string name");
hr = pAppGroup->AddMember(sidString, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not add member to group");
// Save changes to the store.
pAppGroup->Submit(0, myVar);
// Clean up resources.
pStore->Release();
pAppGroup->Release();
SysFreeString(storeName);
SysFreeString(groupName);
SysFreeString(sidString);
VariantClear(&myVar);
CoUninitialize();
}
void MyHandleError(char *s)
{
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x\n.",GetLastError());
printf("Program terminating.\n");
exit(1);
}
Een LDAP-querygroep maken
Een LDAP-querygroep heeft een lidmaatschap dat is gedefinieerd door de query die is opgenomen in de waarde van de eigenschap LdapQuery.
In het volgende voorbeeld ziet u hoe u een LDAP-querytoepassingsgroep maakt en alle gebruikers toevoegt als leden van die groep. In het voorbeeld wordt ervan uitgegaan dat er een bestaand XML-beleidsarchief is met de naam MyStore.xml in de hoofdmap van station C.
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
#pragma comment(lib, "duser.lib")
#include <windows.h>
#include <stdio.h>
#include <azroles.h>
#include <objbase.h>
void main(void){
IAzAuthorizationStore* pStore = NULL;
IAzApplicationGroup* pAppGroup = NULL;
HRESULT hr;
void MyHandleError(char *s);
BSTR storeName = NULL;
BSTR groupName = NULL;
BSTR ldapString = NULL;
// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize COM.");
// Create the AzAuthorizationStore object.
hr = CoCreateInstance(
/*"b2bcff59-a757-4b0b-a1bc-ea69981da69e"*/
__uuidof(AzAuthorizationStore),
NULL,
CLSCTX_ALL,
/*"edbd9ca9-9b82-4f6a-9e8b-98301e450f14"*/
__uuidof(IAzAuthorizationStore),
(void**)&pStore);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create AzAuthorizationStore object.");
VARIANT myVar;
myVar.vt = VT_NULL;
// Allocate a string for the name of the store.
if(!(storeName = SysAllocString(L"msxml://c:\\MyStore.xml")))
MyHandleError("Could not allocate string.");
// Initialize the store.
hr = pStore->Initialize(AZ_AZSTORE_FLAG_MANAGE_STORE_ONLY,
storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Create an application group object.
if (!(groupName = SysAllocString(L"Trusted Users3")))
MyHandleError("Could not allocate group name string");
hr = pStore->CreateApplicationGroup(groupName, myVar, &pAppGroup);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create application group.");
// Set the Type property to AZ_GROUPTYPE_LDAP_QUERY.
hr = pAppGroup->put_Type(AZ_GROUPTYPE_LDAP_QUERY);
if (!(SUCCEEDED(hr)))
MyHandleError("Error changing type to LDAP query");
// Add LDAP query for all users.
if (!(ldapString =
SysAllocString(L"(&(objectCategory=person)(objectClass=user))")))
MyHandleError("Could not allocate LDAP query string");
hr = pAppGroup->put_LdapQuery(ldapString);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not add query to group");
// Save changes to the store.
hr = pAppGroup->Submit(0, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not save changes to store.");
// Clean up resources.
pStore->Release();
pAppGroup->Release();
SysFreeString(storeName);
SysFreeString(groupName);
SysFreeString(ldapString);
CoUninitialize();
}
void MyHandleError(char *s)
{
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x\n.",GetLastError());
printf("Program terminating.\n");
exit(1);
}