Я новичок в 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/ApproveVacation&id=workflows/15361 -v
Нет «конечной точки» для обработки этого запроса.Не перебирая источник, я предполагаю, что это то, что код создает для меня как запрос.