Quellcode durchsuchen

为规则文件或文件夹添加文件锁定功能,某用户锁定文件或文件夹后,其它用户只能查看文件,不能编辑或删除

jacky6024 vor 8 Jahren
Ursprung
Commit
35774c9ff5
27 geänderte Dateien mit 228 neuen und 33 gelöschten Zeilen
  1. 29 0
      urule-console/src/main/java/com/bstek/urule/console/repository/NodeLockException.java
  2. 3 2
      urule-console/src/main/java/com/bstek/urule/console/repository/RepositoryRefactor.java
  3. 6 4
      urule-console/src/main/java/com/bstek/urule/console/repository/RepositoryService.java
  4. 135 10
      urule-console/src/main/java/com/bstek/urule/console/repository/RepositoryServiceImpl.java
  5. 18 0
      urule-console/src/main/java/com/bstek/urule/console/repository/model/RepositoryFile.java
  6. 7 5
      urule-console/src/main/java/com/bstek/urule/console/servlet/BaseServletHandler.java
  7. 5 2
      urule-console/src/main/java/com/bstek/urule/console/servlet/URuleServlet.java
  8. 3 2
      urule-console/src/main/java/com/bstek/urule/console/servlet/client/ClientConfigServletHandler.java
  9. 2 2
      urule-console/src/main/java/com/bstek/urule/console/servlet/common/CommonServletHandler.java
  10. 18 4
      urule-console/src/main/java/com/bstek/urule/console/servlet/frame/FrameServletHandler.java
  11. 1 1
      urule-console/src/main/java/com/bstek/urule/console/servlet/permission/PermissionConfigServletHandler.java
  12. 1 1
      urule-console/src/main/java/com/bstek/urule/console/servlet/respackage/PackageServletHandler.java
  13. 0 0
      urule-console/src/main/resources/urule-asserts/js/actionEditor.bundle.js
  14. 0 0
      urule-console/src/main/resources/urule-asserts/js/clientConfigEditor.bundle.js
  15. 0 0
      urule-console/src/main/resources/urule-asserts/js/constantEditor.bundle.js
  16. 0 0
      urule-console/src/main/resources/urule-asserts/js/decisionTableEditor.bundle.js
  17. 0 0
      urule-console/src/main/resources/urule-asserts/js/decisionTreeEditor.bundle.js
  18. 0 0
      urule-console/src/main/resources/urule-asserts/js/flowDesigner.bundle.js
  19. 0 0
      urule-console/src/main/resources/urule-asserts/js/frame.bundle.js
  20. 0 0
      urule-console/src/main/resources/urule-asserts/js/packageEditor.bundle.js
  21. 0 0
      urule-console/src/main/resources/urule-asserts/js/parameterEditor.bundle.js
  22. 0 0
      urule-console/src/main/resources/urule-asserts/js/permissionConfigEditor.bundle.js
  23. 0 0
      urule-console/src/main/resources/urule-asserts/js/ruleSetEditor.bundle.js
  24. 0 0
      urule-console/src/main/resources/urule-asserts/js/scoreCardTable.bundle.js
  25. 0 0
      urule-console/src/main/resources/urule-asserts/js/scriptDecisionTableEditor.bundle.js
  26. 0 0
      urule-console/src/main/resources/urule-asserts/js/ulEditor.bundle.js
  27. 0 0
      urule-console/src/main/resources/urule-asserts/js/variableEditor.bundle.js

+ 29 - 0
urule-console/src/main/java/com/bstek/urule/console/repository/NodeLockException.java

@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright 2017 Bstek
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.  You may obtain a copy
+ * of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ ******************************************************************************/
+package com.bstek.urule.console.repository;
+
+import com.bstek.urule.RuleException;
+
+/**
+ * @author Jacky.gao
+ * @since 2017年11月22日
+ */
+public class NodeLockException extends RuleException {
+	private static final long serialVersionUID = 5117384355737392800L;
+	public NodeLockException(String msg) {
+		super(msg);
+	}
+}

+ 3 - 2
urule-console/src/main/java/com/bstek/urule/console/repository/RepositoryRefactor.java

@@ -28,6 +28,7 @@ import javax.jcr.RepositoryException;
 import org.apache.tika.io.IOUtils;
 
 import com.bstek.urule.RuleException;
+import com.bstek.urule.console.User;
 import com.bstek.urule.console.repository.model.FileType;
 import com.bstek.urule.console.repository.updater.ReferenceUpdater;
 
@@ -42,7 +43,7 @@ public class RepositoryRefactor {
 		this.repositoryService=repositoryService;
 		this.updaters=updaters;
 	}
-	public void rename(Node rootNode,String path,String newpath,String createUser){
+	public void rename(Node rootNode,String path,String newpath,User user){
 		List<String> referenceFiles=getFiles(rootNode,path);
 		for(String nodePath:referenceFiles){
 			for(ReferenceUpdater updater:updaters){
@@ -53,7 +54,7 @@ public class RepositoryRefactor {
 						inputStream.close();
 						String newContent=updater.update(path, path, content);
 						if(newContent!=null){
-							repositoryService.saveFile(newpath,createUser,newContent, false,null);
+							repositoryService.saveFile(newpath,newContent,user,false,null);
 						}
 					} catch (IOException e) {
 						throw new RuleException(e);

+ 6 - 4
urule-console/src/main/java/com/bstek/urule/console/repository/RepositoryService.java

@@ -35,12 +35,14 @@ public interface RepositoryService {
 	boolean fileExistCheck(String filePath);
 	RepositoryFile createProject(String projectName,User user,boolean classify);
 	void createDir(String path,User user);
-	void createFile(String path,String content,String createUser);
-	void saveFile(String path,String content,String createUser,boolean newVersion,String versionComment);
-	void deleteFile(String path);
+	void createFile(String path,String content,User user);
+	void saveFile(String path,String content,User user,boolean newVersion,String versionComment);
+	void deleteFile(String path,User user);
+	void lockPath(String path,User user);
+	void unlockPath(String path,User user);
 	Repository loadRepository(String project,String companyId,boolean classify,FileType[] types,String searchFileName);
 	List<RepositoryFile> loadProject(String companyId);
-	void fileRename(String path, String newPath);
+	void fileRename(String path, String newPath,User user);
 	List<String> getReferenceFiles(String path,String searchText);
 	InputStream readFile(String path,String version);
 	List<ResourcePackage> loadProjectResourcePackages(String project) throws Exception;

+ 135 - 10
urule-console/src/main/java/com/bstek/urule/console/repository/RepositoryServiceImpl.java

@@ -32,6 +32,10 @@ import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
+import javax.jcr.lock.Lock;
+import javax.jcr.lock.LockException;
+import javax.jcr.lock.LockManager;
+import javax.jcr.nodetype.NodeType;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
 import javax.jcr.version.VersionIterator;
@@ -87,6 +91,7 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 	private RepositoryImpl repository;
 	private Session session;
 	private VersionManager versionManager;
+	private LockManager lockManager;
 	private RepositoryRefactor refactor;
 	private RepositoryInteceptor repositoryInteceptor;
 	private PermissionService permissionService;
@@ -620,12 +625,14 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 					}
 					file.setFullPath(fileNode.getPath());
 					file.setName(name);
+					buildNodeLockInfo(fileNode,file);
 					parent.addChild(file, false);
 					buildNodes(fileNode.getNodes(), file, types,folderType,searchFileName);
 				}else{
 					file.setFullPath(fileNode.getPath());
 					file.setName(name);
 					file.setType(Type.folder);
+					buildNodeLockInfo(fileNode,file);
 					file.setFolderType(folderType);
 					parent.addChild(file, true);
 					buildNodes(fileNode.getNodes(), file, types,folderType,searchFileName);
@@ -635,12 +642,114 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 			throw new RuleException(ex);
 		}
 	}
+	
+	private void buildNodeLockInfo(Node node,RepositoryFile file) throws Exception{
+		String absPath=node.getPath();
+		if(!lockManager.isLocked(absPath)){
+			return;
+		}
+		String owner=lockManager.getLock(absPath).getLockOwner();
+		file.setLock(true);
+		file.setLockInfo("被"+owner+"锁定");
+	}
+	
+	@Override
+	public void lockPath(String path,User user) {
+		path = processPath(path);
+		int pos=path.indexOf(":");
+		if(pos!=-1){
+			path=path.substring(0,pos);
+		}
+		try{
+			Node rootNode=getRootNode();
+			if (!rootNode.hasNode(path)) {
+				throw new RuleException("File [" + path + "] not exist.");
+			}
+			Node fileNode = rootNode.getNode(path);
+			String topAbsPath=fileNode.getPath();
+			if(lockManager.isLocked(topAbsPath)){
+				String owner=lockManager.getLock(topAbsPath).getLockOwner();
+				throw new NodeLockException("【"+path+"】已被"+owner+"锁定,您不能进行再次锁定!");
+			}
+			
+			List<Node> nodeList=new ArrayList<Node>();
+			unlockAllChildNodes(fileNode, user, nodeList, path);
+			for(Node node:nodeList){
+				if(!lockManager.isLocked(node.getPath())){
+					continue;
+				}
+				Lock lock=lockManager.getLock(node.getPath());
+				lockManager.unlock(lock.getNode().getPath());
+			}
+			if(!fileNode.isNodeType(NodeType.MIX_LOCKABLE)){
+				if (!fileNode.isCheckedOut()) {
+					versionManager.checkout(fileNode.getPath());
+				}
+				fileNode.addMixin("mix:lockable");
+				session.save();
+			}
+			lockManager.lock(topAbsPath, true, true, Long.MAX_VALUE, user.getUsername());				
+		}catch(Exception ex){
+			if(ex instanceof LockException){
+				String msg=ex.getMessage();
+				if(msg.startsWith("Unable to perform a locking operation on a non-lockable node")){
+					throw new NodeLockException("锁定操作只能针对urule-2.1.1及以后版本创建的文件及文件夹进行操作!");
+				}
+			}
+			throw new RuleException(ex);
+		}
+	}
+	
+	private void unlockAllChildNodes(Node node,User user,List<Node> nodeList,String rootPath) throws Exception{
+		NodeIterator iter=node.getNodes();
+		while(iter.hasNext()){
+			Node nextNode=iter.nextNode();
+			String absPath=nextNode.getPath();
+			if(!lockManager.isLocked(absPath)){
+				continue;
+			}
+			Lock lock=lockManager.getLock(absPath);
+			String owner=lock.getLockOwner();
+			if(!user.getUsername().equals(owner)){
+				throw new NodeLockException("当前目录下有子目录被其它人锁定,您不能执行锁定"+rootPath+"目录");
+			}
+			nodeList.add(nextNode);
+			unlockAllChildNodes(nextNode, user, nodeList, rootPath);
+		}
+	}
+	
+	@Override
+	public void unlockPath(String path,User user) {
+		path = processPath(path);
+		int pos=path.indexOf(":");
+		if(pos!=-1){
+			path=path.substring(0,pos);
+		}
+		try{
+			Node rootNode=getRootNode();
+			if (!rootNode.hasNode(path)) {
+				throw new RuleException("File [" + path + "] not exist.");
+			}
+			Node fileNode = rootNode.getNode(path);
+			String absPath=fileNode.getPath();
+			if(!lockManager.isLocked(absPath)){
+				throw new NodeLockException("当前文件未锁定,不需要解锁!");
+			}
+			Lock lock=lockManager.getLock(absPath);
+			String owner=lock.getLockOwner();
+			if(!owner.equals(user.getUsername())){
+				throw new NodeLockException("当前文件由【"+owner+"】锁定,您无权解锁!");
+			}
+			lockManager.unlock(lock.getNode().getPath());
+		}catch(Exception ex){
+			throw new RuleException(ex);
+		}
+	}
 
-	public void deleteFile(String path) {
+	public void deleteFile(String path,User user) {
 		if(!permissionService.fileHasWritePermission(path)){
 			throw new NoPermissionException();
 		}
-		
 		repositoryInteceptor.deleteFile(path);
 		path = processPath(path);
 		try {
@@ -663,12 +772,14 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 						continue;
 					}
 					fileNode = fileNode.getNode(dir);
+					lockCheck(fileNode,user);
 					if (!fileNode.isCheckedOut()) {
 						versionManager.checkout(fileNode.getPath());
 					}
 				}
 			}
 			fileNode = rootNode.getNode(path);
+			lockCheck(fileNode,user);
 			if (!fileNode.isCheckedOut()) {
 				versionManager.checkout(fileNode.getPath());
 			}
@@ -680,7 +791,7 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 	}
 
 	@Override
-	public void saveFile(String path, String content,String createUser,boolean newVersion,String versionComment) {
+	public void saveFile(String path, String content,User user,boolean newVersion,String versionComment) {
 		path=Utils.decodeURL(path); 
 		if(path.indexOf(RES_PACKGE_FILE)>-1){
 			if(!permissionService.projectPackageHasWritePermission(path)){
@@ -703,11 +814,12 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 				throw new RuleException("File [" + path + "] not exist.");
 			}
 			Node fileNode = rootNode.getNode(path);
+			lockCheck(fileNode,user);
 			versionManager.checkout(fileNode.getPath());
 			Binary fileBinary = new BinaryImpl(content.getBytes("utf-8"));
 			fileNode.setProperty(DATA, fileBinary);
 			fileNode.setProperty(FILE, true);
-			fileNode.setProperty(CRATE_USER, createUser);
+			fileNode.setProperty(CRATE_USER, user.getUsername());
 			Calendar calendar = Calendar.getInstance();
 			calendar.setTime(new Date());
 			DateValue dateValue = new DateValue(calendar);
@@ -717,9 +829,6 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 			}
 			session.save();
 			if (newVersion) {
-				if(StringUtils.isNotBlank(versionComment)){
-					
-				}
 				versionManager.checkin(fileNode.getPath());
 			}
 		} catch (Exception ex) {
@@ -807,6 +916,7 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 					} else {
 						parentNode = parentNode.addNode(dir);
 						parentNode.addMixin("mix:versionable");
+						parentNode.addMixin("mix:lockable");
 						parentNode.setProperty(DIR_TAG, true);
 						parentNode.setProperty(FILE, true);
 						parentNode.setProperty(CRATE_USER,user.getUsername());
@@ -826,11 +936,11 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 		}
 	}
 
-	public void createFile(String path, String content,String createUser) {
+	public void createFile(String path, String content,User user) {
 		if(!permissionService.isAdmin()){
 			throw new NoPermissionException();
 		}
-		createFileNode(path, content, createUser, true);
+		createFileNode(path, content, user.getUsername(), true);
 	}
 	
 	
@@ -844,6 +954,7 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 			}
 			Node fileNode = rootNode.addNode(path);
 			fileNode.addMixin("mix:versionable");
+			fileNode.addMixin("mix:lockable");
 			Binary fileBinary = new BinaryImpl(content.getBytes());
 			fileNode.setProperty(DATA, fileBinary);
 			if(isFile){
@@ -972,6 +1083,19 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 		this.repositoryBuilder = repositoryBuilder;
 	}
 
+	private void lockCheck(Node node,User user){
+		try{
+			if(lockManager.isLocked(node.getPath())){
+				String lockOwner=lockManager.getLock(node.getPath()).getLockOwner();
+				if(lockOwner.equals(user.getUsername())){
+					return;
+				}
+				throw new NodeLockException("【"+node.getName()+"】已被"+lockOwner+"锁定!");
+			}			
+		}catch(Exception ex){
+			throw new RuleException(ex);
+		}
+	}
 	
 	private Node getRootNode(){
 		try {
@@ -988,7 +1112,7 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 		return path;
 	}
 
-	public void fileRename(String path, String newPath) {
+	public void fileRename(String path, String newPath,User user) {
 		if(!permissionService.isAdmin()){
 			throw new NoPermissionException();
 		}
@@ -1051,6 +1175,7 @@ public class RepositoryServiceImpl implements RepositoryService, ApplicationCont
 			cred.setAttribute("AutoRefresh", true);
 			session = repository.login(cred, null);
 			versionManager = session.getWorkspace().getVersionManager();
+			lockManager=session.getWorkspace().getLockManager();
 			Collection<ReferenceUpdater> updaters = applicationContext.getBeansOfType(ReferenceUpdater.class).values();
 			refactor = new RepositoryRefactor(this, updaters);
 			

+ 18 - 0
urule-console/src/main/java/com/bstek/urule/console/repository/model/RepositoryFile.java

@@ -31,6 +31,8 @@ public class RepositoryFile {
 	private String fullPath;
 	private Type type;
 	private Type folderType;
+	private boolean lock;
+	private String lockInfo;
 	@JsonIgnore
 	private LibType libType;
 	@JsonIgnore
@@ -114,4 +116,20 @@ public class RepositoryFile {
 	public void setFolderType(Type folderType) {
 		this.folderType = folderType;
 	}
+
+	public boolean isLock() {
+		return lock;
+	}
+
+	public void setLock(boolean lock) {
+		this.lock = lock;
+	}
+
+	public String getLockInfo() {
+		return lockInfo;
+	}
+
+	public void setLockInfo(String lockInfo) {
+		this.lockInfo = lockInfo;
+	}
 }

+ 7 - 5
urule-console/src/main/java/com/bstek/urule/console/servlet/BaseServletHandler.java

@@ -15,6 +15,7 @@
  ******************************************************************************/
 package com.bstek.urule.console.servlet;
 
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 
 import javax.servlet.ServletException;
@@ -31,12 +32,13 @@ import com.bstek.urule.RuleException;
 public abstract class BaseServletHandler implements ServletHandler {
 	
 	protected void invokeMethod(String methodName,HttpServletRequest req,HttpServletResponse resp){
-		try{
-			Method method=this.getClass().getMethod(methodName, new Class<?>[]{HttpServletRequest.class,HttpServletResponse.class});			
+		Method method;
+		try {
+			method = this.getClass().getMethod(methodName, new Class<?>[]{HttpServletRequest.class,HttpServletResponse.class});
 			method.invoke(this, new Object[]{req,resp});
-		}catch(Exception ex){
-			throw new RuleException(ex);
-		}
+		} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
+			throw new RuleException(e);
+		}			
 	}
 	
 	protected String retriveMethod(HttpServletRequest req) throws ServletException{

+ 5 - 2
urule-console/src/main/java/com/bstek/urule/console/servlet/URuleServlet.java

@@ -32,6 +32,7 @@ import org.springframework.web.context.WebApplicationContext;
 import org.springframework.web.context.support.WebApplicationContextUtils;
 
 import com.bstek.urule.console.exception.NoPermissionException;
+import com.bstek.urule.console.repository.NodeLockException;
 
 /**
  * @author Jacky.gao
@@ -92,8 +93,10 @@ public class URuleServlet extends HttpServlet{
 					errorMsg=e.getClass().getName();
 				}
 				pw.write(errorMsg);
-				pw.close();				
-				throw new ServletException(ex);				
+				pw.close();
+				if(!(e instanceof NodeLockException)){					
+					throw new ServletException(ex);				
+				}
 			}
 		}finally{
 			RequestHolder.reset();

+ 3 - 2
urule-console/src/main/java/com/bstek/urule/console/servlet/client/ClientConfigServletHandler.java

@@ -27,6 +27,7 @@ import org.apache.velocity.VelocityContext;
 
 import com.bstek.urule.Utils;
 import com.bstek.urule.console.EnvironmentUtils;
+import com.bstek.urule.console.User;
 import com.bstek.urule.console.repository.RepositoryService;
 import com.bstek.urule.console.repository.RepositoryServiceImpl;
 import com.bstek.urule.console.servlet.RenderPageServletHandler;
@@ -64,8 +65,8 @@ public class ClientConfigServletHandler extends RenderPageServletHandler{
 		project=Utils.decodeURL(project);
 		String file=project+"/"+RepositoryServiceImpl.CLIENT_CONFIG_FILE;
 		String content=req.getParameter("content");
-		String username=EnvironmentUtils.getLoginUser(new RequestContext(req, resp)).getUsername();
-		repositoryService.saveFile(file, content, username, false,null);
+		User user=EnvironmentUtils.getLoginUser(new RequestContext(req, resp));
+		repositoryService.saveFile(file, content, user, false,null);
 	}
 	
 	public void setRepositoryService(RepositoryService repositoryService) {

+ 2 - 2
urule-console/src/main/java/com/bstek/urule/console/servlet/common/CommonServletHandler.java

@@ -86,8 +86,8 @@ public class CommonServletHandler extends RenderPageServletHandler{
 		String content=req.getParameter("content");
 		String versionComment=req.getParameter("versionComment");
 		Boolean newVersion = Boolean.valueOf(req.getParameter("newVersion"));
-		String createUser=EnvironmentUtils.getLoginUser(new RequestContext(req, resp)).getUsername();
-		repositoryService.saveFile(file,content,createUser,newVersion,versionComment);
+		User user=EnvironmentUtils.getLoginUser(new RequestContext(req, resp));
+		repositoryService.saveFile(file,content,user,newVersion,versionComment);
 	}
 	public void loadReferenceFiles(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 		String path=req.getParameter("path");

+ 18 - 4
urule-console/src/main/java/com/bstek/urule/console/servlet/frame/FrameServletHandler.java

@@ -163,7 +163,7 @@ public class FrameServletHandler extends RenderPageServletHandler{
 		String content=IOUtils.toString(inputStream, "utf-8");
 		inputStream.close();
 		User user=EnvironmentUtils.getLoginUser(new RequestContext(req,resp));
-		repositoryService.createFile(newFullPath, content,user.getUsername());
+		repositoryService.createFile(newFullPath, content,user);
 		loadProjects(req, resp);
 	}
 	
@@ -236,7 +236,7 @@ public class FrameServletHandler extends RenderPageServletHandler{
 			content.append("</" + name + ">");
 		}
 		User user=EnvironmentUtils.getLoginUser(new RequestContext(req,resp));
-		repositoryService.createFile(path, content.toString(),user.getUsername());
+		repositoryService.createFile(path, content.toString(),user);
 		RepositoryFile newFileInfo=new RepositoryFile();
 		newFileInfo.setFullPath(path);
 		if(fileType.equals(FileType.VariableLibrary)){
@@ -333,13 +333,26 @@ public class FrameServletHandler extends RenderPageServletHandler{
 	public void deleteFile(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 		String path=req.getParameter("path");
 		path=Utils.decodeURL(path);
-		repositoryService.deleteFile(path);
+		User user=EnvironmentUtils.getLoginUser(new RequestContext(req, resp));
+		repositoryService.deleteFile(path,user);
 		String isFolder=req.getParameter("isFolder");
 		if(StringUtils.isNotBlank(isFolder) && isFolder.equals("true")){
 			loadProjects(req, resp);
 		}
 	}
 	
+	public void lockFile(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		String file=req.getParameter("file");
+		User user=EnvironmentUtils.getLoginUser(new RequestContext(req, resp));
+		repositoryService.lockPath(file, user);
+		loadProjects(req, resp);
+	}
+	public void unlockFile(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+		String file=req.getParameter("file");
+		User user=EnvironmentUtils.getLoginUser(new RequestContext(req, resp));
+		repositoryService.unlockPath(file, user);
+		loadProjects(req, resp);
+	}
 	
 	public void exportProjectBackupFile(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 		String path=req.getParameter("path");
@@ -426,7 +439,8 @@ public class FrameServletHandler extends RenderPageServletHandler{
 		path=Utils.decodeURL(path);
 		String newPath=req.getParameter("newPath");
 		newPath=Utils.decodeURL(newPath);
-		repositoryService.fileRename(path, newPath);
+		User user=EnvironmentUtils.getLoginUser(new RequestContext(req, resp));
+		repositoryService.fileRename(path, newPath,user);
 		loadProjects(req, resp);
 	}
 	

+ 1 - 1
urule-console/src/main/java/com/bstek/urule/console/servlet/permission/PermissionConfigServletHandler.java

@@ -133,7 +133,7 @@ public class PermissionConfigServletHandler extends RenderPageServletHandler{
 		String companyId=user.getCompanyId();
 		String content=req.getParameter("content");
 		String path=RepositoryServiceImpl.RESOURCE_SECURITY_CONFIG_FILE+(companyId==null ? "" : companyId);
-		repositoryService.saveFile(path, content, user.getUsername(), false,null);
+		repositoryService.saveFile(path, content, user, false,null);
 		permissionStore.refreshPermissionStore();
 	}
 	

+ 1 - 1
urule-console/src/main/java/com/bstek/urule/console/servlet/respackage/PackageServletHandler.java

@@ -421,7 +421,7 @@ public class PackageServletHandler extends RenderPageServletHandler {
 		String path=project+"/"+RepositoryServiceImpl.RES_PACKGE_FILE;
 		String xml=req.getParameter("xml");
 		User user=EnvironmentUtils.getLoginUser(new RequestContext(req,resp));
-		repositoryService.saveFile(path, xml, user.getUsername(), false,null);
+		repositoryService.saveFile(path, xml, user, false,null);
 	}
 	
 	@SuppressWarnings("unchecked")

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/actionEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/clientConfigEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/constantEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/decisionTableEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/decisionTreeEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/flowDesigner.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/frame.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/packageEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/parameterEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/permissionConfigEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/ruleSetEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/scoreCardTable.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/scriptDecisionTableEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/ulEditor.bundle.js


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
urule-console/src/main/resources/urule-asserts/js/variableEditor.bundle.js


Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.