、これは理想的ではありませんが、私は[Searchable]
と[AdminSearchable]
属性を作成することになった、とGoogleの検索ドキュメントクラスのすべてのプロパティにこれらの装飾:
[Searchable]
public string UserName { get; set; }
[Searchable]
public string UserDisplay { get; set; }
[AdminSearchable]
public string UserEmail { get; set; }
し、リストを構築するためにこれらのstatic
フィールドを使用現在のユーザーが管理者であるかどうかに基づいて、検索フィールド、の:
private static readonly string[] _PublicSearchFeilds =
typeof(SearchDocument).GetProperties()
.Where(p => System.Attribute.IsDefined(p, typeof(SearchableAttribute)))
.Select(p => p.Name.ToLowerCamelCase()).ToArray();
private static readonly string[] _AdminSearchFeilds =
typeof(SearchDocument).GetProperties()
.Where(p =>
System.Attribute.IsDefined(p, typeof(SearchableAttribute)) ||
System.Attribute.IsDefined(p, typeof(AdminSearchableAttribute)))
.Select(p => p.Name.ToLowerCamelCase()).ToArray();
そしてSearchParameters.SearchFields
にこれを渡されました。
通常、セキュリティトリミングはドキュメントに適用され、フィールドには適用されません。シナリオについてもっと分かち合うことができますか?特に、検索応答にそのようなフィールドが存在しないのではなく、特定のフィールドでの一致を防ぐ必要があるのはなぜですか? –
ユーザードキュメントがありますが、そのドキュメントには取得できない機密データが含まれている可能性がありますが、管理者は機密データを使用してルックアップを行うことができます。たとえば、電子メールアドレス。 –
フィールドは取得できないため、データが漏洩するリスクはありません。最悪の場合、ユーザーは検索ヒットを取得し、その理由を理解しない可能性があります。 searchFieldsを使用する以外に、これに対処するもう1つの方法は、すべての機密フィールドを含むadmin検索用の2番目のインデックスを作成することです。各ドキュメントには、エンドユーザーに表示されるドキュメントのIDへの参照が戻されます。 –