簡體   English   中英

Lucene安全搜索ASP.NET C#

[英]Lucene security search asp.net c#

我希望這對某人來說是一個非常簡單的問題。

基本上,我們在lucene.net中針對我的文檔編制安全信息索引,該信息存儲在2個文檔字段中,分別稱為viewuseridsviewroleids ,因此在構造查詢時-僅返回用戶具有查看權限的文檔。

查詢所需的功能是:如果用戶屬於存儲在viewroleids中的角色(此位工作正常),我們只希望返回文檔,但是如果viewuserids字段包含任何id(該字段可能不包含任何值),該viewroleids的索引應被忽略,並且只有viewuserids中存在的用戶才能看到該文檔。

如上所述,角色部分按預期工作,但是我們需要一些幫助在API中構造術語查詢以考慮到viewuserids (有效地覆蓋了viewroleids查詢。這是到目前為止:

BooleanQuery bq = new BooleanQuery();
foreach (int roleId in roleIds)
{
      bq.Add(new TermQuery(new Term("viewroleid", roleId.ToString())),BooleanClause.Occur.SHOULD);
}
bq.Add(new TermQuery(new Term("viewuserid", User.Id.ToString())), BooleanClause.Occur.SHOULD);

在此先感謝您的幫助!

注意:這兩個字段都存儲在未標記的索引中

有多種方法可以做到這一點,但這是一種:

添加字段“ hasviewuserids”,如果文檔具有與之關聯的任何viewuserid,則包含“ TRUE”,否則包含“ FALSE”。 因此,例如,如果當前用戶標識為3且分別位於角色5和6中,則查詢將類似於:

(+(viewroleids:5 viewroleids:6) +hasviewuserids:FALSE) OR viewuserids:3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM