使用 FileNet Java API 获取其他用户的访问权限

Posted

技术标签:

【中文标题】使用 FileNet Java API 获取其他用户的访问权限【英文标题】:Get Access Rights for another user with FileNet Java API 【发布时间】:2015-08-21 08:33:52 【问题描述】:

我们有一个构建系统,我们需要在该系统上为其他用户的构建获取文档。我们没有他们的密码,只有他们的登录名,我们将使用服务帐户。有没有办法使用 FileNet API 获取另一个主体的访问权限,这样我们就不会允许他们获取他们无权访问的内容?

出于性能考虑,我宁愿让 CE 进行检查,而不是获取所有权限并一一检查。加上嵌套组和安全优先级(直接/模板/代理)可能会减慢很多事情的速度并使代码变得复杂。 getAccessAllowed 之类的东西,但给定了主体或用户?如果没有,最好的方法是什么?

我看到 get_MemberOfGroups 处理嵌套组,但我们仍然必须检查所有权限,注意源优先级和拒绝/允许优先级,这意味着重新实施 CE 安全策略。

【问题讨论】:

您好,您的要求完成了吗? ,我有类似的要求,通过独立应用程序在服务用户的操作中断言其他用户的 Id @Guillaume 简短的回答是否定的,您必须循环访问 ACL 以检查某个用户是否具有访问权限。并且不要尝试求助于数据库,因为 ACL 存储为 BLOB 对象,该对象被 FileNet 解组为 ACL 对象,然后注入到文档中 【参考方案1】:

您可以创建自定义 LoginModule 来验证没有密码的用户,然后您可以使用 CE 作为原始用户而无需服务帐户。

但您需要将此用户添加到具有正确权限的 FN 对象 ACL 中。

【讨论】:

非常感谢 swepss。有些人也把我引向了那个方向。我从未使用过 LoginModule,它是我必须在本地(在使用 Java API 的客户端中)、在服务器上(在 WebSphere 控制台中)添加的 LoginModule 吗?你有一个例子或一些你可以指出我的文件吗?谢谢 大声笑这有点刻薄:) 当然我这样做了,我更多地谈论的是架构和什么地方,但足够公平。如果我有问题,我会进行更多调查并回来。老实说,我最近没有太多时间研究这个,还有人告诉我 TAI 拦截器,这可能是另一种方法。 @guillaume-delory TAI 它与 JAAS 并不完全相同。只需检查此link 即可了解 TAI 和 JAAS 之间的区别。对于您的情况,从我的角度来看,JAAS 会比 TAI 更好。 TAI 面向保护连接而不是真正验证用户,只授权连接。当您需要保护系统免受系统和身份验证服务之间的一些“不良代理”影响时,您应该使用 TAI。【参考方案2】:

如果我没听错,我认为最好的方法是另一种方法。您不需要查看用户拥有什么访问权限并与文档匹配,您需要查看该用户要求的内容以及他具有正确的访问级别。 最好的方法是使用带有用户组的 Active Directory 并为他们设置权限文档类型 vie。但是,让我们说一下您在文档方面设置访问权限的方式。当用户调用文档时,获取它的一个实例

Document  doc  =  Factory.Document.fetchInstance(os,ID,null);

并获取权限列表

 AccessPermissionList parmissin = doc.Permissions;

通过循环获取为该文档设置的权限

 foreach (IAccessPermission owner in parmissin)

if (owner.GranteeName == "your loginuserpermission" )

 // you can cont your work


并保持本地 一组权限,您可以在其中验证您的用户 (db/txt),如果它们匹配,请使用您的服务帐户用户并显示图像和信息。

【讨论】:

以上是关于使用 FileNet Java API 获取其他用户的访问权限的主要内容,如果未能解决你的问题,请参考以下文章

使用 FileNet API 获取 DocumentSet 中最新版本文档的检索名称

在 Filenet 中获取和更新工作流数据

通过符号名称获取 PropertyTemplate 的最快方法是 IBM FileNet CE API

Filenet - 如何获取工作流组中的属性值

通过 com.filenet.api.util.UserContext 进行文件网身份验证

FileNet:获取存储区域上的可用空间