/* * (C) Copyright 2014-2016 Nuxeo SA (http://nuxeo.com/) and others. * * 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. * * Contributors: * Maxime Hilaire * Florent Guillaume */ package org.nuxeo.ecm.directory.core; import org.nuxeo.ecm.core.api.CoreSession; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.api.security.ACE; import org.nuxeo.ecm.core.api.security.ACL; import org.nuxeo.ecm.core.api.security.ACP; import org.nuxeo.ecm.core.api.security.SecurityConstants; import org.nuxeo.ecm.core.test.annotations.RepositoryInit; /** * Default repository initializer that create the default DM doc hierarchy. */ public class CoreDirectoryInit implements RepositoryInit { public static String ROOT_FOLDER_PATH = "/rootFolder"; public static String DOC_ID_USER1 = "user1"; public static String DOC_PWD_USER1 = "foo1"; public static String DOC_ID_USER2 = "user2"; public static String DOC_PWD_USER2 = "foo2"; public static String USERS_RESTRICTED_FOLDER = "users-restricted"; public static String USERS_UNRESTRICTED_FOLDER = "users-unrestricted"; public static String USERS_RESTRICTED_PATH = ROOT_FOLDER_PATH + "/test/" + USERS_RESTRICTED_FOLDER; public static String USERS_UNRESTRICTED_PATH = ROOT_FOLDER_PATH + "/test/" + USERS_UNRESTRICTED_FOLDER; @Override public void populate(CoreSession session) { // create root folder manually, like would be done in CoreDirectory.start DocumentModel rootFolder = session.createDocumentModel("/", ROOT_FOLDER_PATH.substring(1), "Workspace"); rootFolder = session.createDocument(rootFolder); // add write ACL for user_1 ACP acp = rootFolder.getACP(); ACL localACL = acp.getOrCreateACL(); localACL.add(new ACE(CoreDirectoryFeature.USER1_NAME, SecurityConstants.WRITE, true)); session.setACP(rootFolder.getRef(), acp, true); DocumentModel doc = session.createDocumentModel(ROOT_FOLDER_PATH, "test", "Workspace"); doc.setProperty("dublincore", "title", "test"); doc = session.createDocument(doc); doc = createDocument(session, ROOT_FOLDER_PATH + "/test", USERS_RESTRICTED_FOLDER, "Folder"); // user_2 has no permission on it acp = doc.getACP(); localACL = doc.getACP().getOrCreateACL("local"); localACL.clear(); localACL.add(new ACE("Administrator", SecurityConstants.EVERYTHING, true)); localACL.add(new ACE(CoreDirectoryFeature.USER1_NAME, SecurityConstants.EVERYTHING, true)); localACL.add(new ACE(SecurityConstants.EVERYONE, SecurityConstants.EVERYTHING, false)); session.setACP(doc.getRef(), acp, true); // Create a User1 doc for unit test DocumentModel user1 = createDocument(session, doc.getPathAsString(), "User1", "CoreDirDoc"); user1.setProperty("schema1", "uid", DOC_ID_USER1); user1.setProperty("schema1", "foo", DOC_PWD_USER1); user1.setProperty("schema1", "bar", "bar1"); session.saveDocument(user1); doc = createDocument(session, ROOT_FOLDER_PATH + "/test", USERS_UNRESTRICTED_FOLDER, "Folder"); acp = doc.getACP(); localACL = doc.getACP().getOrCreateACL("local"); localACL.clear(); localACL.add(new ACE("Administrator", SecurityConstants.EVERYTHING, true)); localACL.add(new ACE(CoreDirectoryFeature.USER1_NAME, SecurityConstants.EVERYTHING, true)); localACL.add(new ACE(CoreDirectoryFeature.USER2_NAME, SecurityConstants.EVERYTHING, true)); localACL.add(new ACE(SecurityConstants.EVERYONE, SecurityConstants.EVERYTHING, false)); session.setACP(doc.getRef(), acp, true); // Create a User2 doc for unit test DocumentModel user2 = createDocument(session, doc.getPathAsString(), "User2", "CoreDirDoc"); user2.setProperty("schema1", "uid", DOC_ID_USER2); user2.setProperty("schema1", "foo", DOC_PWD_USER2); user2.setProperty("schema1", "bar", "bar2"); session.saveDocument(user2); } public DocumentModel createDocument(CoreSession session, String parentPath, String docName, String docType) { DocumentModel doc = session.createDocumentModel(parentPath, docName, docType); doc.setProperty("dublincore", "title", docType); return session.createDocument(doc); } public DocumentModel createDomain(CoreSession session, String domainName, String domainTitle) { DocumentModel doc = session.createDocumentModel("/", domainName, "Domain"); doc.setProperty("dublincore", "title", domainTitle); doc = session.createDocument(doc); DocumentModel docDomain = doc; doc = session.createDocumentModel("/" + domainName + "/", "workspaces", "WorkspaceRoot"); doc.setProperty("dublincore", "title", "Workspaces"); doc = session.createDocument(doc); doc = session.createDocumentModel("/" + domainName + "/", "sections", "SectionRoot"); doc.setProperty("dublincore", "title", "Workspaces"); doc = session.createDocument(doc); doc = session.createDocumentModel("/" + domainName + "/", "templates", "TemplateRoot"); doc.setProperty("dublincore", "title", "Templates"); doc.setProperty("dublincore", "description", "Root of workspaces templates"); doc = session.createDocument(doc); return docDomain; } }