C# – User mit “System Administrator”-Role hinzufügen

Bei Self Service Szenarien kann es hilfreich sein nach dem erstellen einer neuen Organization Benutzer zu erstellen als System Administratoren zu berechtigen.
Der folgende Blog Post zeigt wie das mit Hilfe von C# geht. Evtl. für ein Cmdlet..?

Der nachfolgende Code zeigt wie ein neuer User erstellt und die “System Administrator”-Role zugewiesen werden kann.

private IOrganizationService organizationService;

CreateSystemAdministrator(UserName);

private void CreateSystemAdministrator(string domainName)
{
    Entity defaultBusinessUnit = GetDefaultBusinessUnit();
    Entity systemAdministratorRole = GetSystemAdministratorRole();

    // Has the format "domainfirstname.lastname"
    var splittedName = domainName.Split('')[1].Split('.');
    Entity user = CreateUser(domainName, splittedName[0], splittedName[1], defaultBusinessUnit.ToEntityReference());

    // Assign the role
    organizationService.Associate("role", systemAdministratorRole.Id, new Relationship("systemuserroles_association"), new EntityReferenceCollection(new[] { user.ToEntityReference() }));
}

private Entity GetSystemAdministratorRole()
{
    var condition = new ConditionExpression("name", ConditionOperator.Equal, "System Administrator");
    return GetEntities("role", condition).Single();
}

private Entity GetDefaultBusinessUnit()
{
    var condition = new ConditionExpression("parentbusinessunitid", ConditionOperator.Null);
    return GetEntities("businessunit", condition).Single();
}

private Entity CreateUser(string samName, string firstname, string lastname, EntityReference businessUnit)
{
    var user = new Entity("systemuser");
    user["domainname"] = samName;
    user["firstname"] = firstname;
    user["lastname"] = lastname;
    user["businessunitid"] = businessUnit;
    user.Id = organizationService.Create(user);
    return user;
}

private IEnumerable<Entity> GetEntities(string entityName, ConditionExpression condition)
{
    var queryExpression = new QueryExpression
    {
        EntityName = entityName,
        ColumnSet = new ColumnSet(true),
        Criteria = { Conditions = { condition } }
    };

    return organizationService.RetrieveMultiple(queryExpression).Entities;
}

Anmerkung
Beim erstellen eines Users muss der FirstName sowie der LastName angegeben werden. Ansonsten wird eine mysteriöse Fehlermeldung zurückgegeben und der User kann nicht erstellt werden.

Leave a Reply

Your email address will not be published. Required fields are marked *