【发布时间】:2011-11-22 22:18:20
【问题描述】:
我是 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);
}
似乎正在使用“Workflow/ApproveVacation”作为 POST 或 GET 等 http 命令发出 http 请求。我是否误解了 IsOperationAllowedOnDocument 的使用?
编辑
我查看了文档的元数据并添加了权限:
"Permissions": [
{
"Operation": "Workflow/ApproveVacation",
"User": null,
"Role": "Authorization/Roles/BandLeader",
"Allow": true,
"Priority": 0
}
编辑 2
查看代码我发现了 DocumentSession 类上的 GetAuthorizationFor 方法。它返回一个 DocumentPermission 对象,其中包含文档的权限,其中包括有关操作的信息。我想我可以使用它,但我仍然对 IsOperationAllowedOnDocument 方法的目的感到困惑。
编辑 3
我尝试使用 curl 向我的 Raven 服务器发出不同的请求。使用此行会产生 400 错误:
curl http://bho-vm36:8080/authorization/IsAllowed/Authorization/Users/glee?operation=Workflow/ApproveVacation&id=workflows/15361 -v
没有“端点”来处理这个请求。在不单步执行源代码的情况下,我假设这就是代码为我创建的请求。
【问题讨论】:
-
查看请求的实际内容,它会告诉你发生了什么。
-
@Ayende:获取 /authorization/IsAllowed/Authorization/Users/glee?operation=Workflow/ApproveVacation&id=workflows/15361。我有 AuthorizationUser 和 Workflow 对象的 PUT。我没有看到 SetAuthorizationFor 方法的任何内容。
-
@Ayende:知道了。这叫RTFM!!!我慢慢阅读了授权包文档并注意了安装说明。真的很喜欢 RavenDB 对我和我的团队的发展方向。
标签: authorization ravendb