关于基于角色的搜索
Fess 可以根据任意认证系统认证的用户认证信息来区分搜索结果。 例如,拥有角色a的用户A可以在搜索结果中看到角色a的信息,但不拥有角色a的用户B即使搜索也不会看到该信息。 通过使用此功能,可以在门户网站或单点登录环境中,根据登录用户所属部门或职位实现搜索。
Fess 的基于角色的搜索可以从以下途径获取角色信息。
请求参数
请求头
Cookie
Fess 的认证信息
在门户网站或代理型单点登录系统中,可以在认证时通过 Cookie 将认证信息保存到 Fess 运行的域和路径中来获取角色信息。 此外,在反向代理型单点登录系统中,可以在访问 Fess 时将认证信息添加到请求参数或请求头中来获取角色信息。
Note
从请求参数、请求头、Cookie 获取角色信息的功能在初始状态下是禁用的。 如需使用这些功能,必须在 app/WEB-INF/classes/fess.xml 的 roleQueryHelper 组件中配置所引用的键名( parameterKey 、 headerKey 、 cookieKey )、值的加密方式( encryptedParameterValue 等)以及分隔符( valueSeparator 、 roleSeparator )。 初始状态下仅启用基于 Fess 认证信息的角色搜索。
基于角色的搜索配置
本文介绍使用 Fess 认证信息的基于角色的搜索配置方法。
Fess 管理页面配置
启动 Fess 并以管理员身份登录。 创建角色和用户。 例如,在角色管理页面创建 Role1,在用户管理页面创建属于 Role1 的用户。 如需按组分配,可在组管理页面创建组并分配给用户。
接下来,在爬取配置的权限栏中输入 {role}Role1 并保存。 按用户指定时可以用 {user}username ,按组指定时可以用 {group}groupname 来描述。 指定多个权限时,请用换行符分隔。
之后使用此爬取配置进行爬取,即可创建仅属于指定角色、用户、组的用户可搜索的索引。 登录用户会自动获得表示自身的 {user}username 、所属角色的 {role} 以及所属组的 {group} 权限,并与文档设置的权限进行匹配。
Note
如需明确拒绝特定角色、用户、组的访问,可在权限中加上 (deny) 前缀,例如 (deny){role}Role1 (加上 (allow) 表示允许,与未指定时的处理方式相同)。
Note
与 LDAP 或单点登录集成时,用户的角色和组信息将从认证源获取,并以同样方式作为权限处理。 LDAP 集成时的行为可通过 fess_config.properties 中的 ldap.role.search.user.enabled 、 ldap.role.search.group.enabled 、 ldap.role.search.role.enabled (初始值均为 true )来控制。
登录
从管理页面退出登录。 以属于 Role1 的用户登录。 登录成功后会重定向到搜索页面首页。
正常搜索时,仅显示在爬取配置中设置了 Role1 角色的内容。
此外,未登录状态下的搜索将作为 guest 用户的搜索。 对于希望向未登录用户显示的文档,请在爬取配置的权限栏中设置 {role}guest (初始值由 role.search.guest.permissions 定义)。
登出
在以非管理员用户登录状态下,在搜索页面选择登出即可退出登录。