Skip to content

Commit 85f0012

Browse files
committed
Security editor
1 parent dbaecea commit 85f0012

File tree

10 files changed

+193
-13
lines changed

10 files changed

+193
-13
lines changed

com.ecmdeveloper.plugin.cmis/plugin.xml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,30 @@
147147
</visibleWhen>
148148
</command>
149149
</menuContribution>
150+
<menuContribution
151+
locationURI="menu:com.ecmdeveloper.plugin.security.editor.toolbar?after=additions">
152+
<command
153+
commandId="com.ecmdeveloper.plugin.cmis.scripting.executeClass"
154+
icon="icons/application_go.png"
155+
style="push">
156+
<visibleWhen
157+
checkEnabled="false">
158+
<with
159+
variable="selection">
160+
<iterate>
161+
<or>
162+
<instanceof
163+
value="com.ecmdeveloper.plugin.cmis.model.Document">
164+
</instanceof>
165+
<instanceof
166+
value="com.ecmdeveloper.plugin.cmis.model.Folder">
167+
</instanceof>
168+
</or>
169+
</iterate>
170+
</with>
171+
</visibleWhen>
172+
</command>
173+
</menuContribution>
150174
</extension>
151175
<extension
152176
point="org.eclipse.ui.commands">

com.ecmdeveloper.plugin.cmis/src/com/ecmdeveloper/plugin/cmis/model/security/AccessControlEntries.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,14 @@ private AccessControlEntry createAccessControlEntry(SecurityPrincipal principal,
196196

197197
private IAccessLevel getAccessLevel(String permission) {
198198
for ( IAccessLevel accessLevel : accessLevels) {
199+
System.out.println(((AccessLevel)accessLevel).getId() );
199200
if ( permission.equalsIgnoreCase( ((AccessLevel)accessLevel).getId() ) ) {
200201
return accessLevel;
201202
}
202203
}
203-
return null;
204+
AccessLevel accessLevel = new AccessLevel(permission);
205+
accessLevels.add(accessLevel);
206+
return accessLevel;
204207
}
205208

206209
public void addAccessLevel(AccessLevel accessLevel) {

com.ecmdeveloper.plugin.cmis/src/com/ecmdeveloper/plugin/cmis/model/security/AccessLevel.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,17 @@ private void addAccessRights(Map<String, PermissionMapping> permissionMappings)
6262
}
6363
}
6464

65+
public AccessLevel(String id) {
66+
this.id = id;
67+
this.name = id;
68+
this.defaultLevel = false;
69+
70+
accessRights = new ArrayList<IAccessRight>();
71+
}
72+
6573
private boolean isGranted(String permission, PermissionMapping permissionMapping) {
6674
for (String p : permissionMapping.getPermissions() ) {
67-
if (p.equalsIgnoreCase(permission)
68-
|| (permission.equals(CMIS_ALL_PERMISSION) &&
69-
(isGranted(CMIS_READ_PERMISSION, permissionMapping) ||
70-
isGranted(CMIS_WRITE_PERMISSION,permissionMapping)) ) ) {
75+
if (p.equalsIgnoreCase(permission) ) {
7176
return true;
7277
}
7378
}

com.ecmdeveloper.plugin.cmis/src/com/ecmdeveloper/plugin/cmis/model/tasks/security/SaveAccessControlEntriesTask.java

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,17 @@
2222

2323
import java.util.ArrayList;
2424
import java.util.Collection;
25+
import java.util.HashSet;
2526
import java.util.List;
27+
import java.util.Set;
2628

2729
import org.apache.chemistry.opencmis.client.api.CmisObject;
2830
import org.apache.chemistry.opencmis.client.api.Folder;
2931
import org.apache.chemistry.opencmis.client.api.OperationContext;
3032
import org.apache.chemistry.opencmis.client.api.Session;
3133
import org.apache.chemistry.opencmis.client.runtime.OperationContextImpl;
3234
import org.apache.chemistry.opencmis.commons.data.Ace;
35+
import org.apache.chemistry.opencmis.commons.data.Acl;
3336
import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
3437

3538
import com.ecmdeveloper.plugin.cmis.model.ObjectStoreItem;
@@ -58,12 +61,102 @@ public SaveAccessControlEntriesTask(ObjectStoreItem objectStoreItem, AccessContr
5861

5962
@Override
6063
public Object call() throws Exception {
64+
6165
Session session = objectStoreItem.getObjectStore().getSession();
6266
CmisObject cmisObject = objectStoreItem.getCmisObject();
63-
cmisObject.addAcl(createAces(session), AclPropagation.REPOSITORYDETERMINED );
67+
Acl acl = getOldAcl(session, cmisObject);
68+
69+
List<Ace> aceListAdd = new ArrayList<Ace>();
70+
List<Ace> aceListRemove = new ArrayList<Ace>();
71+
72+
if ( acl != null ) {
73+
74+
for (Ace ace : acl.getAces() ) {
75+
76+
System.out.println( ace.toString() );
77+
if ( !ace.isDirect() ) {
78+
continue;
79+
}
80+
81+
ISecurityPrincipal principal = getPrincipal( ace );
82+
if ( principal == null ) {
83+
aceListRemove.add( ace );
84+
} else {
85+
86+
if ( isDifferent(ace, principal) ) {
87+
aceListAdd.add( createAce(session, principal) );
88+
aceListRemove.add( ace );
89+
}
90+
}
91+
}
92+
93+
for ( ISecurityPrincipal principal : accessControlEntries.getPrincipals() ) {
94+
if ( getAce(principal, acl) == null ) {
95+
Ace createAce = createAce(session, principal);
96+
if ( !createAce.getPermissions().isEmpty() ) {
97+
aceListAdd.add(createAce );
98+
}
99+
}
100+
}
101+
}
102+
103+
// cmisObject.applyAcl(aceListAdd, aceListRemove, AclPropagation.REPOSITORYDETERMINED);
104+
cmisObject.applyAcl(aceListAdd, aceListRemove, AclPropagation.OBJECTONLY);
105+
64106
return null;
65107
}
66108

109+
private Acl getOldAcl(Session session, CmisObject cmisObject) {
110+
OperationContext operationContext = new OperationContextImpl();
111+
operationContext.setIncludeAcls(true);
112+
CmisObject cmisObject2 = session.getObject(cmisObject, operationContext);
113+
Acl acl = cmisObject2.getAcl();
114+
return acl;
115+
}
116+
117+
private Ace getAce(ISecurityPrincipal principal, Acl acl) {
118+
for ( Ace ace : acl.getAces() ) {
119+
if ( ace.isDirect() ) {
120+
if ( principal.getName().equals( ace.getPrincipalId() ) ) {
121+
return ace;
122+
}
123+
}
124+
}
125+
return null;
126+
}
127+
128+
private boolean isDifferent(Ace ace, ISecurityPrincipal principal) {
129+
Set<String> permissions = getPermissions(principal);
130+
if ( permissions.size() != ace.getPermissions().size() ) {
131+
return true;
132+
}
133+
permissions.removeAll( ace.getPermissions() );
134+
return !permissions.isEmpty();
135+
}
136+
137+
private Set<String> getPermissions(ISecurityPrincipal principal) {
138+
139+
Set<String> permissionSet = new HashSet<String>();
140+
141+
for (IAccessControlEntry accessControlEntry : principal.getAccessControlEntries() ) {
142+
if ( accessControlEntry.getSource().equals(AccessControlEntrySource.DIRECT ) ) {
143+
IAccessLevel accessLevel = accessControlEntry.getAccessLevel();
144+
permissionSet.add( ((AccessLevel)accessLevel).getId() );
145+
}
146+
}
147+
148+
return permissionSet;
149+
}
150+
151+
private ISecurityPrincipal getPrincipal(Ace ace) {
152+
for ( ISecurityPrincipal principal : accessControlEntries.getPrincipals() ) {
153+
if ( principal.getName().equals( ace.getPrincipalId() ) ) {
154+
return principal;
155+
}
156+
}
157+
return null;
158+
}
159+
67160
private List<Ace> createAces(Session session) {
68161
List<Ace> aceListIn = new ArrayList<Ace>();
69162
for ( ISecurityPrincipal principal : accessControlEntries.getPrincipals() ) {
@@ -77,6 +170,7 @@ private List<Ace> createAces(Session session) {
77170
}
78171

79172
private Ace createAce(Session session, ISecurityPrincipal principal) {
173+
80174
List<String> permissions = new ArrayList<String>();
81175
for (IAccessControlEntry accessControlEntry : principal.getAccessControlEntries() ) {
82176
if ( accessControlEntry.getSource().equals(AccessControlEntrySource.DIRECT ) ) {

com.ecmdeveloper.plugin.core/src/com/ecmdeveloper/plugin/core/model/constants/AccessControlEntrySource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public String toString() {
4545
}
4646
};
4747

48-
private static final String INHERITED_STRING = "inherited entry";
49-
private static final String DIRECT_STRING = "direct entry";
50-
private static final String DEFAULT_STRING = "direct entry from the default instance security";
48+
private static final String INHERITED_STRING = "an inherited entry";
49+
private static final String DIRECT_STRING = "a direct entry";
50+
private static final String DEFAULT_STRING = "a direct entry from the default instance security";
5151
}

com.ecmdeveloper.plugin.security/src/com/ecmdeveloper/plugin/security/editor/BaseDetailsPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
public abstract class BaseDetailsPage implements IDetailsPage {
4646

4747
private static final String PERIOD = ".";
48-
private static final String ACE_DESCRIPTION_2 = "'. This is a ";
48+
private static final String ACE_DESCRIPTION_2 = "'. This is ";
4949
private static final String ACE_DESCRIPTION_1 = "Access Control Entry for principal '";
5050
protected IManagedForm form;
5151
private Section section;

com.ecmdeveloper.plugin.security/src/com/ecmdeveloper/plugin/security/editor/CmisEntryDetailsEditPage.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,12 @@ public class CmisEntryDetailsEditPage extends BaseDetailsPage {
5151
private ComboViewer levelCombo;
5252
private Label applyToLabel;
5353
private Label typeLabel;
54+
private final SecurityEditorBlock securityEditorBlock;
5455

56+
public CmisEntryDetailsEditPage(SecurityEditorBlock securityEditorBlock) {
57+
this.securityEditorBlock = securityEditorBlock;
58+
}
59+
5560
protected void createClientContent(Composite client) {
5661
super.createClientContent(client);
5762

@@ -115,7 +120,7 @@ protected void setDirty(boolean isDirty) {
115120

116121
if ( isDirty ) {
117122
form.dirtyStateChanged();
118-
// securityEditorBlock.refresh(accessControlEntry);
123+
securityEditorBlock.refresh(accessControlEntry);
119124
setTitleImage(accessControlEntry);
120125
commit(false);
121126
}

com.ecmdeveloper.plugin.security/src/com/ecmdeveloper/plugin/security/editor/SecurityInputDetailsPageProvider.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,15 @@
3333
public class SecurityInputDetailsPageProvider implements IDetailsPageProvider {
3434

3535
private static final String CMIS_ENTRY_VIEW_PAGE_KEY = "cmisControlEntryPage";
36+
private static final String CMIS_ENTRY_EDIT_PAGE_KEY = "cmisControlEntryEditPage";
3637
private static final String ACCESS_CONTROL_ENTRY_VIEW_PAGE_KEY = "accessControlEntryPage";
3738
private static final String ACCESS_CONTROL_ENTRY_EDIT_PAGE_KEY = "accessControlEditEntryPage";
3839
private static final String PRINCIPAL_PAGE_KEY = "principalPage";
3940
private IDetailsPage unknownDetailsPage;
4041
private IDetailsPage accessControlEntryDetailsViewPage;
4142
private IDetailsPage accessControlEntryDetailsEditPage;
4243
private IDetailsPage cmisEntryDetailsViewPage;
44+
private IDetailsPage cmisEntryDetailsEditPage;
4345
private final SecurityEditorBlock securityEditorBlock;
4446
private IDetailsPage securityPrincipalDetailsPage;
4547

@@ -63,6 +65,11 @@ public IDetailsPage getPage(Object key) {
6365
if ( CMIS_ENTRY_VIEW_PAGE_KEY.equals(key) ) {
6466
return getCmisEntryDetailsViewPage();
6567
}
68+
69+
if ( CMIS_ENTRY_EDIT_PAGE_KEY.equals(key) ) {
70+
return getCmisEntryDetailsEditPage();
71+
}
72+
6673
if ( unknownDetailsPage == null ) {
6774
unknownDetailsPage = new PermissionDetailsPage();
6875
}
@@ -71,11 +78,18 @@ public IDetailsPage getPage(Object key) {
7178

7279
private IDetailsPage getCmisEntryDetailsViewPage() {
7380
if ( cmisEntryDetailsViewPage == null) {
74-
cmisEntryDetailsViewPage = new CmisEntryDetailsEditPage();
81+
cmisEntryDetailsViewPage = new CmisEntryDetailsViewPage();
7582
}
7683
return cmisEntryDetailsViewPage;
7784
}
7885

86+
private IDetailsPage getCmisEntryDetailsEditPage() {
87+
if ( cmisEntryDetailsEditPage == null) {
88+
cmisEntryDetailsEditPage = new CmisEntryDetailsEditPage(securityEditorBlock);
89+
}
90+
return cmisEntryDetailsEditPage;
91+
}
92+
7993
private IDetailsPage getSecurityPrincipalDetailsPage() {
8094
if (securityPrincipalDetailsPage == null ) {
8195
securityPrincipalDetailsPage = new SecurityPrincipalDetailsPage( securityEditorBlock.getShell() );
@@ -110,7 +124,11 @@ public Object getPageKey(Object object) {
110124
return ACCESS_CONTROL_ENTRY_VIEW_PAGE_KEY;
111125
}
112126
} else {
113-
return CMIS_ENTRY_VIEW_PAGE_KEY;
127+
if ( accessControlEntry.isEditable() ) {
128+
return CMIS_ENTRY_EDIT_PAGE_KEY;
129+
} else {
130+
return CMIS_ENTRY_VIEW_PAGE_KEY;
131+
}
114132
}
115133
}
116134
return null;

com.ecmdeveloper.plugin.security/src/com/ecmdeveloper/plugin/security/editor/SecurityPage.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.eclipse.jface.action.Separator;
2525
import org.eclipse.jface.action.ToolBarManager;
2626
import org.eclipse.ui.IEditorInput;
27+
import org.eclipse.ui.IWorkbenchActionConstants;
2728
import org.eclipse.ui.forms.IManagedForm;
2829
import org.eclipse.ui.forms.editor.FormEditor;
2930
import org.eclipse.ui.forms.editor.FormPage;
@@ -72,10 +73,12 @@ private void setFormTitle(IManagedForm managedForm) {
7273
private void setFormToolbar(IManagedForm managedForm) {
7374
ToolBarManager manager = (ToolBarManager) managedForm.getForm().getToolBarManager();
7475
Separator action = new Separator("Actions");
76+
Separator action2 = new Separator(IWorkbenchActionConstants.MB_ADDITIONS);
7577
IMenuService menuService = (IMenuService) Activator.getDefault().getWorkbench().getService(IMenuService.class);
7678
menuService.populateContributionManager(manager, "popup:formsToolBar");
7779
manager.update(true);
7880
manager.add(action );
81+
manager.add(action2);
7982
}
8083

8184

com.ecmdeveloper.plugin.ui/plugin.xml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,13 @@
627627
style="push">
628628
</command>
629629
</menuContribution>
630+
<menuContribution
631+
locationURI="popup:com.ecmdeveloper.plugin.views.ObjectStoreFavorites?after=other">
632+
<command
633+
commandId="org.eclipse.ui.file.properties"
634+
style="push">
635+
</command>
636+
</menuContribution>
630637
<menuContribution
631638
locationURI="popup:org.eclipse.search.ui.views.SearchView?after=additions">
632639
<command
@@ -728,6 +735,13 @@
728735
style="push">
729736
</command>
730737
</menuContribution>
738+
<menuContribution
739+
locationURI="popup:org.eclipse.search.ui.views.SearchView?after=other">
740+
<command
741+
commandId="org.eclipse.ui.file.properties"
742+
style="push">
743+
</command>
744+
</menuContribution>
731745
<menuContribution
732746
locationURI="popup:com.ecmdeveloper.plugin.ui.parentFolderView?after=additions">
733747
<command
@@ -829,6 +843,13 @@
829843
style="push">
830844
</command>
831845
</menuContribution>
846+
<menuContribution
847+
locationURI="popup:com.ecmdeveloper.plugin.ui.parentFolderView?after=other">
848+
<command
849+
commandId="org.eclipse.ui.file.properties"
850+
style="push">
851+
</command>
852+
</menuContribution>
832853
<menuContribution
833854
locationURI="toolbar:com.ecmdeveloper.plugin.views.ObjectStoresView?after=additions">
834855
<command
@@ -935,6 +956,13 @@
935956
</visibleWhen>
936957
</command>
937958
</menuContribution>
959+
<menuContribution
960+
locationURI="menu:com.ecmdeveloper.plugin.security.editor.toolbar?after=additions">
961+
<command
962+
commandId="org.eclipse.ui.file.properties"
963+
style="push">
964+
</command>
965+
</menuContribution>
938966
</extension>
939967
<extension
940968
point="org.eclipse.core.expressions.propertyTesters">

0 commit comments

Comments
 (0)