Я использую диспетчер авторизации в своем приложении .net C #. Во время запуска приложения я кэширую все операции, к которым у пользователя есть доступ, а затем использую эти кэшированные данные для дальнейшей обработки. Проблема в том, что я могу проверять доступ только для одной операции за раз, поэтому, если у меня есть 100 операций в azman, а пользователь предоставлен только для 5 правил, мне все равно нужно сделать 100 вызовов AzMan, чтобы получить все подготовленные правила. Есть ли способ получить все подготовленные правила для пользователя только за один вызов?
Как получить все подготовленные операции от AzMan за один вызов?
Ответы (1)
IAzClientContext.AccessCheck
позволяет передавать массив идентификаторов операций.
Я делаю примерно так:
public Tuple<bool, List<int>> AccessCheck(string auditObjectName, List<string> scopeNames, List<int> operations, SortedList<string, string> parameters)
{
object[] operationsArray = operations.ConvertAll(i => (object)i).ToArray();
...
object o = _context.AccessCheck(auditObjectName, (object)scopeNameArray, (object)operationsArray, (object)parameterNames, (object)parameterValues, null, null, null);
object[] oArray = (object[])o;
int[] authorizedOperationsArray = Array.ConvertAll(oArray, obj => (int)obj);
...
Я не тестировал, сколько он будет обрабатывать, и обычно делаю только по одному за раз. Но теоретически это сработает.
Я также не пробовал делать это с несколькими областями (я должен использовать старую схему AzMan 1.0, которая не поддерживала несколько областей в AccessCheck).
person
Alan McBee
schedule
21.02.2011