根据Folder关联的条目模板设置上传文档安全性

         XT上可以预设条目模板(EntryTemplate)来达到模板化控制上传文档安全性和属性等信息的作用。而EntryTemplate本身可以与Folder相关联(一个Folder可以关联多个EntryTemplate),这样我们在XT上的某个Folder下上传即可按照我们所要设置的值进行设置文档安全性和属性信息了,而省去了手动操作,这对zhy天津分公司的业务很有必要,原因是客户在这里总体上有三个基本组,是对所有Folder下的document具备相同权限,而另外另个特殊的组,可能根据不同Folder的不同即不同。

         这些工作在XT上可以轻松通过配置来完成,但作为定制化开发的应用程序,在最初实现时客户并无此要求,最初有这种特殊需求满可以定制特殊的权限管理来完成,但这仅能指标,原因是这样也会是客户做两套动作,一个是在XT上进行,另一个则是在定制的应用上进行。最好的办法是后进行的应用能够直接读取XT的相关EntryTemplate权限在对应folde下传documet时,进行相关设置。

         不过,由于FileNet本身并没有提供直接的根据Folder获取EntryTemplateAPI。而如果要通过遍历整个EntryTemplate来解决获取folder对应的EntryTemplate,一者需要应用维持一种关系(从一定意义上讲,还是得客户进行两套动作,而不是时时一致的状态),二者遍历的工作量也相当大。

         经过分析zhy天津分公司EntryTemplateFolder的特点,可以发现在FolderAnnotations中包含着EntryTemplate对应文档的序列号,可以根据它来获取相关EntryTemplate的内容,从而解析出相关权限,进行设置。本案例的特殊性在于FolderAnnotations中仅存在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();
		}
	
	}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值