我正在尝试使用 RavenDB 的授权包通过在 WorkItem 文档上明确设置的权限来限制查询的结果(在 WorkItems 上)。
例如:
我有一个用户 bob@bob.com,其 userId 为 /users/1 和一个 WorkItem,它在元数据中设置了以下权限:
"Raven-Document-Authorization": {
"Tags": [],
"Permissions": [
{
"Operation": "/Operations/WorkItem/Search",
"User": "users/1",
"Role": null,
"Allow": true,
"Priority": 1
}
]
}
然后,我希望以下代码将查询(从 Bob 的角度来看)限制为这个 WorkItem,因为这是他所拥有的全部权限。
using (var session = documentStore.OpenSession())
{
session.SecureFor("raven/authorization/users/1", "/Operations/WorkItem/Search");
var workItemsQuery = from wi in session.Query<WorkItem>()
select wi;
var debts = workItemsQuery.ToList();
// do something with the work items
}
我的代码基于 RavenDB 文档(上下文和用户部分)中的以下示例:http ://ravendb.net/docs/2.5/server/extending/bundles/authorization-bundle-design
我得到的是没有明确权限设置的工作项。这对我来说非常令人费解,因为如果我运行以下代码:
using (var session = mDocumentStore.OpenSession())
{
var answer = session.Advanced.IsOperationAllowedOnDocument(userId, operation, securableId);
var allowed = answer.IsAllowed;
}
允许是真的。
还有一点需要注意的是,我试图忽略或根本不使用授权包的角色概念,我想知道这是否会产生一些意想不到的影响。
我很可能误解了他们的例子,有人可以为我解释这个问题吗?提前致谢。
另外,我想知道我遇到的问题是否与这个 StackOverflow 问题有关:RavenDB: Raven Query not return correct count with document authorization,但他们的问题似乎与计数有关,不一定与实际结果有关。