Поиск безопасности Lucene asp.net c # - PullRequest
0 голосов
/ 22 сентября 2010

Надеюсь, это будет очень простой вопрос для кого-то ....

В основном мы индексируем информацию о безопасности для моих документов в lucene.net, информация хранится в 2 полях документа, которые называются viewuserids и viewroleids , поэтому при построении запроса возвращаются только документы, к которым у пользователя есть доступ к просмотру.

Требуемая функциональность для запроса заключается в том, что нам нужны только документывозвращается, если пользователь принадлежит ролям, хранящимся в viewroleids (этот бит работает нормально), однако, если viewuserids поле содержит любые идентификаторы (поле может не содержать никаких значений) виндекс 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);

Заранее благодарим за любую помощь!

ПРИМЕЧАНИЕ: оба поля хранятся в индексе без маркеров

1 Ответ

0 голосов
/ 22 сентября 2010

Есть несколько способов сделать это, но вот один из них:

Добавить поле «hasviewuserids», которое содержит «TRUE», если с документом связаны какие-либо viewuserids, и «FALSE» если нет,Так, если, например, текущий идентификатор пользователя равен 3 и находится в ролях 5 и 6, запрос будет выглядеть следующим образом:

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