я там f я принимаю решение никогда не фиксировать файл, у меня всегда есть "грязный" контроль - я недоволен.
Относительно этой конкретной точки, Вы могли бы хотеть к
.gitignore
, файл как другой предложил, или использовать схему как та, описанная в этот ответ мой.
Умм, добро пожаловать в путаницу, которая связана с 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,