设置安全性根据Folder关联的条目模板设置上传文档安全性
文章结束给大家来个程序员笑话:[M]
在XT上可以设预条目模板(EntryTemplate)来到达模板化制控上传文档安全性和属性等信息的作用。而EntryTemplate本身可以与Folder相干联(一个Folder可以关联多个EntryTemplate),这样我们在XT上的某个Folder下上传便可按照我们所要设置的值行进设置文档安全性和属性信息了,而省去了手动作操,这对zhy天津分公司的业务很有必要,原因是户客在这里体总上有三个基本组,是对全部Folder下的document备具雷同权限,而另外另个殊特的组,可能根据不同Folder的不同即不同。
这些任务在XT上可以松轻通过配置来实现,但作为制定化开辟的应用程序,在最初实现时户客并无此求要,最初有种这殊特需求满可以制定殊特的权限管理来实现,但这仅能标指,原因是这样也会是户客做两套作动,一个是在XT上行进,另一个则是在制定的应用上行进。最好的法办是后行进的应用可以直接读取XT的相干EntryTemplate权限在对应folde下传documet时,行进相干设置。
不过,由于FileNet本身并没有供给直接的根据Folder获得EntryTemplate的API。而如果要通过遍历整个EntryTemplate来处理获得folder对应的EntryTemplate,一者须要应用维持一种关系(从定一意义上讲,还是得户客行进两套作动,而不是不时致一的状态),者二遍历的任务量也相当大。
经过分析zhy天津分公司EntryTemplate和Folder的特色,可以发在现Folder的Annotations中包含着EntryTemplate对应文档的列序号,可以根据它来获得相干EntryTemplate的内容,从而解析出相干权限,行进设置。本例案的殊特性在于Folder的Annotations中仅存在EntryTemplate的列序号(以件文式形存储,须要解析出特定notes的值)。体具作操过程意示代码如下所示:
//获得folder关联entry template 的列序的id public void testWhatIsFolderAnnotationsTextId(){ Connection connection = CEHelper.getConnection(); CEHelper.pushSubject(connection); ObjectStore os = CEHelper.getObjectStore(connection); try{ Folder folder = Factory.Folder.fetchInstance(os, new Id("{F78C8CE7-94FE-47CA-94E4-19A78EEBBF9E}"), null); AnnotationSet get_Annotations = folder.get_Annotations(); Iterator iterator = get_Annotations.iterator(); while(iterator.hasNext()){ Annotation annotation = (Annotation)iterator.next(); logger.info("annotation.get_Name() = " + annotation.get_Name()); DocumentBuilderFactory docBuilderFactory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = null; docBuilder = docBuilderFactory.newDocumentBuilder(); org.w3c.dom.Document doc = docBuilder.parse(annotation.accessContentStream(0)); NodeList parameters = doc.getElementsByTagName("object"); Node rootNode = null; if (parameters != null) { rootNode = parameters.item(0); } Element ele = (Element)rootNode; NodeList elementsByTagName = ele.getElementsByTagName("setting"); Node item = elementsByTagName.item(1); logger.info("item.getNodeName() = " + item.getNodeName()); logger.info("item.getNodeValue() = " + item.getNodeValue()); logger.info("item.getTextContent() = " + item.getTextContent()); } }catch(Exception e){ e.printStackTrace(); }finally{ CEHelper.popSubject(); } } //根据列序ID获得应相entry template的安全性等内容 public void testGetVersionSeries(){ Connection connection = CEHelper.getConnection(); CEHelper.pushSubject(connection); ObjectStore os = CEHelper.getObjectStore(connection); try{ String docId = "{60CFDD81-C2DA-46F3-A98E-B49A125930F9}"; VersionSeries fetchInstance = Factory.VersionSeries.fetchInstance(os, new Id(docId), null); logger.info(fetchInstance.get_Id().toString()); Document doc = (Document)fetchInstance.get_CurrentVersion(); org.w3c.dom.Document w3cDoc = WcmXMLUtil.getDocumentFromInputStream(doc.accessContentStream(0)); EntryTemplateParser parser = new EntryTemplateParser(w3cDoc); String className = parser.getClassName(); String classId = parser.getId(); List permissionList = parser.getPermissionList(); List propertyList = parser.getPropertyList(); Iterator iterator = permissionList.iterator(); while(iterator.hasNext()){ String item = (String)iterator.next(); logger.info(item.toString()); } }catch(Exception e){ e.printStackTrace(); }finally{ CEHelper.popSubject(); } } //设置文档安全性 public void testPermission(){ Connection connection = CEHelper.getConnection(); CEHelper.pushSubject(connection); ObjectStore os = CEHelper.getObjectStore(connection); try{ Document doc = Factory.Document.createInstance(os, "GeneralClass"); AccessPermissionList createList = Factory.AccessPermission.createList(); AccessPermission createInstance2 = Factory.AccessPermission.createInstance(); createInstance2.set_AccessMask(131073); createInstance2.set_AccessType(AccessType.ALLOW); createInstance2.set_GranteeName("#AUTHENTICATED-USERS"); createInstance2.set_InheritableDepth(-1); AccessPermission createInstance3 = Factory.AccessPermission.createInstance(); createInstance3.set_AccessMask(998871); createInstance3.set_AccessType(AccessType.ALLOW); createInstance3.set_GranteeName("fnadmins"); createInstance3.set_InheritableDepth(-1); createList.add(createInstance2); createList.add(createInstance3); doc.getProperties().putValue("DocumentTitle", "log4j_3.log"); String minType = "application/octet-stream"; doc.set_MimeType(minType); doc.checkin(AutoClassify.DO_NOT_AUTO_CLASSIFY, CheckinType.MAJOR_VERSION); doc.save(RefreshMode.REFRESH); Folder folder = Factory.Folder.fetchInstance(os, new Id("{0BCA05B3-6A0A-407C-B17A-503FA4070193}"), null); ReferentialContainmentRelationship rcr = folder.file(doc, AutoUniqueName.NOT_AUTO_UNIQUE, null, DefineSecurityParentage.DO_NOT_DEFINE_SECURITY_PARENTAGE); rcr.save(RefreshMode.REFRESH); doc.set_Permissions(createList); doc.save(RefreshMode.NO_REFRESH); }catch(Exception e){ e.printStackTrace(); }finally{ CEHelper.popSubject(); } }
文章结束给大家分享下程序员的一些笑话语录: 爱情观
爱情就是死循环,一旦执行就陷进去了。
爱上一个人,就是内存泄露--你永远释放不了。
真正爱上一个人的时候,那就是常量限定,永远不会改变。
女朋友就是私有变量,只有我这个类才能调用。
情人就是指针用的时候一定要注意,要不然就带来巨大的灾难。