2011-01-27 2 views
1

Я использую диспетчер авторизации в приложении .net C#. Во время запуска приложения я кэширую все операции, для которых пользователь имеет доступ, затем использует данные кэширования для дальнейшей обработки. Проблема в том, что я могу проверять доступ только для одной операции за один раз, поэтому, если у меня есть 100-секундные операции в азмане, и пользователь предоставляется только для 5 правил, мне все же нужно сделать 100 звонков в AzMan, чтобы получить все подготовленные правила. Есть ли способ получить все предоставленное правило для пользователя только по одному вызову?Как получить все подготовленные операции от AzMan за один раз?

ответ

0

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).