Получение списка Задач, которые принадлежат Роли от Azman

я там f я принимаю решение никогда не фиксировать файл, у меня всегда есть "грязный" контроль - я недоволен.

Относительно этой конкретной точки, Вы могли бы хотеть к .gitignore, файл как другой предложил, или использовать схему как та, описанная в этот ответ мой.

5
задан 26 October 2009 в 22:38
поделиться

1 ответ

Умм, добро пожаловать в путаницу, которая связана с AzMan :-) В настоящее время существует 3 различных версии / интерфейса, с 2 различными методами выполнения ваших требований.

Из стандартного интерфейса COM ( IAzApplication), app.Roles относится к Role Assignments (член, назначенный ролям), тогда как я думаю, что вам нужны определения ролей, которые не были представлены как отдельный тип до более поздней версии 3.

] Для IAzApplication: для доступа к определениям ролей вам необходимо перебрать все app.Tasks и проверить флаг task.IsRoleDefinition, чтобы получить определения ролей.

| IAzApplication3     | IAzApplication            |
|---------------------|---------------------------|
| app.RoleAssignments | app.Roles                 |

| app.RoleDefinitions | app.Tasks                 |
|                     | and only consider tasks:  |
|                     | task.IsRoleDefinition = 1 |

Примечание: Вы также должны помнить, что вы попытаться сделать это в AzMan не так просто, как в исходном коде. Роли могут состоять из подролей, задач и операций, задачи могут состоять из подзадач и операций. поэтому вам действительно нужно рекурсивно перебрать роли, чтобы составить полный список операций, задач и ролей в каждой данной роли.

Следующий код выведет полную иерархию определений ролей приложений для всех версий AzMan (на всякий случай, в нем есть лямбда-выражение обратного вызова .NET 3.5 и общий, но это можно переписать для .NET. 1.0 достаточно просто). Обратный вызов возвращает тип (роль, задача, операция), имя и глубину иерархии (для отступов):

    private static void ProcessAzManRoleDefinitions(IAzApplication app, IAzTask task, int level, Action<string, string, int> callbackAction)
    {
        bool isRole = (task.IsRoleDefinition == 1);

        callbackAction((isRole ? "Role" : "Task"), task.Name, level);
        level++;

        // Iterate over any subtasks defined for this task (or role)
        Array tasks = (Array)task.Tasks;
        foreach (string taskName in tasks)
        {
            IAzTask currentTask = app.OpenTask(taskName, null);

            // Need to recursively process child roles and tasks
            ProcessAzManRoleDefinitions(app, currentTask, level, callbackAction);
        }

        // Iterate over any opeations defined for this task (or role)
        Array taskOperations = (Array)task.Operations;
        foreach (string operationName in taskOperations)
            callbackAction("Operation", operationName, level);
    }

    private static string GetRoleDefinitionHierarchy()
    {
        AzAuthorizationStore azManStore = new AzAuthorizationStoreClass();
        azManStore.Initialize(0, "connectionstring", null);
        IAzApplication azApp = azManStore.OpenApplication("TestApp", null);

        StringBuilder output = new StringBuilder();

        foreach (IAzTask task in azApp.Tasks)
        {
            if (task.IsRoleDefinition == 1)
                ProcessAzManRoleDefinitions(azApp, task, 0, (type, name, level) => output.Append("".PadLeft(level * 2) + type + ": " + name + "\n"));
        }

        return output.ToString();
    }

Если вы знаете, что вашей целевой платформой будет Windows 7, Vista или Windows Server 2008, тогда вам следует использовать Интерфейс IAzManApplication3, и он намного лучше определен (RoleDefinition имеет свой собственный набор / тип). Если вы разрабатываете в Windows XP,

6
ответ дан 14 December 2019 в 13:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: