Использование IsOperationAllowedOnDocument в RavenDB возвращает исключение InvalidSystemOperation - PullRequest
1 голос
/ 21 ноября 2011

Я новичок в RavenDB и мне нужна помощь с авторизацией на уровне документов.При использовании Advanced.IsOperationAllowedOnDocument я получаю следующее исключение:

TestRavenDB.TestSuite.CanAssignRoleToUser: System.InvalidOperationException:

Не удалось выяснить, что делать

Ваш запрос не былсоответствует чему-либо, что знает Raven, извините ...

----> System.Net.WebException: удаленный сервер возвратил ошибку: (400) Bad Request.

Мой код:

string operation = "Workflow/ApproveVacation";
string geddyUser = "Authorization/Users/glee";

var workflow = WorkflowMother.SpawnWorkflow();
var docStore = GetDocStore();
TruncateWorkflowDocuments(docStore);

using(var s = docStore.OpenSession())
{
    s.Store(new AuthorizationUser()
        {
            Name = "Geddy Lee",
                    Id = geddyUser,
                    Roles = { "Authorization/Roles/BandLeader" }
    });

        s.Store(workflow);

    s.SetAuthorizationFor(workflow, new DocumentAuthorization
        {
            Permissions = 
                {
                    new DocumentPermission
                        {
                            Allow = true,
                                Operation = operation,
                                Role = "Authorization/Roles/BandLeader"
                        }
                }
    });

    s.SaveChanges();
}

using(var s = docStore.OpenSession())
{       
    var operationResults = s.Advanced.IsOperationAllowedOnDocument(geddyUser, operation, workflow.Id);
        Assert.IsTrue(operationResults.IsAllowed);

}

Похоже, что http-запрос выполняется с использованием «Workflow / ApproveVacation» в качестве http-команды, такой как POST или GET.Я неправильно истолковываю использование IsOperationAllowedOnDocument?

Редактировать

Я просмотрел метаданные для документа, и было добавлено разрешение:

"Permissions": [
      {
        "Operation": "Workflow/ApproveVacation",
        "User": null,
        "Role": "Authorization/Roles/BandLeader",
        "Allow": true,
        "Priority": 0
      }

Редактировать 2

Глядя на код, я обнаружил метод GetAuthorizationFor в классе DocumentSession.Он возвращает объект DocumentPermission, который содержит разрешения для документа, который включает в себя информацию об операции.Я предполагаю, что могу использовать это, но я все еще смущен целью метода IsOperationAllowedOnDocument.

Редактировать 3

Используя curl, я экспериментировал с различными запросами к моему серверу Raven.Использование этой строки привело к ошибке 400:

curl http://bho-vm36:8080/authorization/IsAllowed/Authorization/Users/glee?operation=Workflow/ApproveVaca‌​tion&id=workflows/15361 -v

Нет «конечной точки» для обработки этого запроса.Не перебирая источник, я предполагаю, что это то, что код создает для меня как запрос.

1 Ответ

1 голос
/ 22 ноября 2011

Айенде заставила меня задуматься о правильном пути.Пакет авторизации не был установлен на сервере, поэтому появляется сообщение об ошибке, в котором говорится, что «авторизация» была неизвестна (400 неверных запросов).Возиться с curl и отправкой http-запросов на сервер Raven поможет мне сориентироваться.Сообщения, возвращенные приложением консоли сервера, были тем местом, где я начал создавать запросы «вручную».

Шаги для решения:

  1. РедактироватьRaven.Server.exe.config и добавьте ключ

    <add key="Raven/Plugins" value="~\Plugins"/>

  2. Создать папку с именем Plugins в каталоге сервера

  3. КопироватьRaven.Bundles.Authorization.dll для плагинов

Документ по авторизации здесь .

...