diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java index 694f08109e3..982f17a0fc2 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/socket/NotebookServer.java @@ -467,8 +467,7 @@ public List> generateNotebooksInfo(boolean needsReload, LOG.error("Fail to reload notes from repository", e); } } - - List notes = notebook.getAllNotes(); + List notes = notebook.getAllNotes(subject); List> notesInfo = new LinkedList<>(); for (Note note : notes) { Map info = new HashMap<>(); diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java index 025accd4284..595596b2e7f 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Notebook.java @@ -28,8 +28,12 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.TimeUnit; +import com.google.common.base.Predicate; +import com.google.common.collect.FluentIterable; +import com.google.common.collect.Sets; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.stream.JsonReader; @@ -523,6 +527,35 @@ public int compare(Note note1, Note note2) { } } + public List getAllNotes(AuthenticationInfo subject) { + final Set entities = Sets.newHashSet(); + if (subject != null) { + entities.add(subject.getUser()); + } + + synchronized (notes) { + return FluentIterable.from(notes.values()).filter(new Predicate() { + @Override + public boolean apply(Note input) { + return input != null && notebookAuthorization.isReader(input.getId(), entities); + } + }).toSortedList(new Comparator() { + @Override + public int compare(Note note1, Note note2) { + String name1 = note1.id(); + if (note1.getName() != null) { + name1 = note1.getName(); + } + String name2 = note2.id(); + if (note2.getName() != null) { + name2 = note2.getName(); + } + return name1.compareTo(name2); + } + }); + } + } + private Map getParagraphForJobManagerItem(Paragraph paragraph) { Map paragraphItem = new HashMap<>(); diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java index bfa97e05de3..f5a59cf4557 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java @@ -42,6 +42,7 @@ import org.apache.zeppelin.scheduler.Job.Status; import org.apache.zeppelin.scheduler.SchedulerFactory; import org.apache.zeppelin.search.SearchService; +import org.apache.zeppelin.user.AuthenticationInfo; import org.apache.zeppelin.user.Credentials; import org.junit.After; import org.junit.Before; @@ -812,6 +813,26 @@ public void testNormalizeNoteName() throws IOException { notebook.removeNote(note1.getId(), null); } + @Test + public void testGetAllNotes() throws Exception { + Note note1 = notebook.createNote(null); + Note note2 = notebook.createNote(null); + assertEquals(2, notebook.getAllNotes(new AuthenticationInfo("anonymous")).size()); + + notebook.getNotebookAuthorization().setOwners(note1.getId(), Sets.newHashSet("user1")); + notebook.getNotebookAuthorization().setWriters(note1.getId(), Sets.newHashSet("user1")); + notebook.getNotebookAuthorization().setReaders(note1.getId(), Sets.newHashSet("user1")); + assertEquals(1, notebook.getAllNotes(new AuthenticationInfo("anonymous")).size()); + assertEquals(2, notebook.getAllNotes(new AuthenticationInfo("user1")).size()); + + notebook.getNotebookAuthorization().setOwners(note2.getId(), Sets.newHashSet("user2")); + notebook.getNotebookAuthorization().setWriters(note2.getId(), Sets.newHashSet("user2")); + notebook.getNotebookAuthorization().setReaders(note2.getId(), Sets.newHashSet("user2")); + assertEquals(0, notebook.getAllNotes(new AuthenticationInfo("anonymous")).size()); + assertEquals(1, notebook.getAllNotes(new AuthenticationInfo("user1")).size()); + assertEquals(1, notebook.getAllNotes(new AuthenticationInfo("user2")).size()); + } + private void delete(File file){ if(file.isFile()) file.delete(); else if(file.isDirectory()){