Skip to content

Commit 6fafdef

Browse files
authored
Merge pull request #560 from jbernal0019/master
Implement groups and permissions
2 parents 8ada822 + 99cc0d0 commit 6fafdef

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+6668
-1410
lines changed

chris_backend/config/settings/local.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
# SECURITY WARNING: keep the secret key used in production secret!
2525
SECRET_KEY = 'w1kxu^l=@pnsf!5piqz6!!5kdcdpo79y6jebbp+2244yjm*#+k'
2626

27+
# Superuser settings
28+
CHRIS_SUPERUSER_PASSWORD = 'chris1234'
29+
2730
# Hosts/domain names that are valid for this site
2831
# See https://docs.djangoproject.com/en/4.2/ref/settings/#allowed-hosts
2932
ALLOWED_HOSTS = ['*']
@@ -189,7 +192,8 @@
189192
'last_name': 'sn',
190193
'email': 'mail'
191194
}
195+
192196
AUTHENTICATION_BACKENDS = (
193-
'django_auth_ldap.backend.LDAPBackend',
197+
'users.models.CustomLDAPBackend',
194198
'django.contrib.auth.backends.ModelBackend',
195199
)

chris_backend/config/settings/production.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ def get_secret(setting, secret_type=env):
3535
SECRET_KEY = get_secret('DJANGO_SECRET_KEY')
3636

3737

38+
# SUPERUSER SETTINGS
39+
CHRIS_SUPERUSER_PASSWORD = get_secret('CHRIS_SUPERUSER_PASSWORD')
40+
41+
3842
# SITE CONFIGURATION
3943
# ------------------------------------------------------------------------------
4044
# Hosts/domain names that are valid for this site
@@ -162,7 +166,8 @@ def get_secret(setting, secret_type=env):
162166
'last_name': 'sn',
163167
'email': 'mail'
164168
}
169+
165170
AUTHENTICATION_BACKENDS = (
166-
'django_auth_ldap.backend.LDAPBackend',
171+
'users.models.CustomLDAPBackend',
167172
'django.contrib.auth.backends.ModelBackend',
168173
)

chris_backend/config/urls.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from django.conf import settings
2121

2222
from plugins import admin as plugin_admin_views
23-
from users import views as group_admin_views
2423

2524

2625
urlpatterns = [
@@ -39,26 +38,6 @@
3938
plugin_admin_views.ComputeResourceAdminDetail.as_view(),
4039
name='admin-computeresource-detail'),
4140

42-
path('chris-admin/api/v1/groups/',
43-
group_admin_views.GroupList.as_view(),
44-
name='group-list'),
45-
46-
path('chris-admin/api/v1/groups/search/',
47-
group_admin_views.GroupListQuerySearch.as_view(),
48-
name='group-list-query-search'),
49-
50-
path('chris-admin/api/v1/groups/<int:pk>/',
51-
group_admin_views.GroupDetail.as_view(),
52-
name='group-detail'),
53-
54-
path('chris-admin/api/v1/groups/<int:pk>/users/',
55-
group_admin_views.GroupUserList.as_view(),
56-
name='group-user-list'),
57-
58-
path('chris-admin/api/v1/groups/users/<int:pk>/',
59-
group_admin_views.GroupUserDetail.as_view(),
60-
name='user_groups-detail'),
61-
6241
path('chris-admin/', admin.site.urls),
6342

6443
path('api/', include('core.api')),

chris_backend/core/api.py

Lines changed: 124 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,30 @@
3131
path('v1/users/<int:pk>/groups/',
3232
user_views.UserGroupList.as_view(), name='user-group-list'),
3333

34+
path('v1/groups/',
35+
user_views.GroupList.as_view(),
36+
name='group-list'),
37+
38+
path('v1/groups/search/',
39+
user_views.GroupListQuerySearch.as_view(),
40+
name='group-list-query-search'),
41+
42+
path('v1/groups/<int:pk>/',
43+
user_views.GroupDetail.as_view(),
44+
name='group-detail'),
45+
46+
path('v1/groups/<int:pk>/users/',
47+
user_views.GroupUserList.as_view(),
48+
name='group-user-list'),
49+
50+
path('v1/groups/<int:pk>/users/search/',
51+
user_views.GroupUserListQuerySearch.as_view(),
52+
name='group-user-list-query-search'),
53+
54+
path('v1/groups/users/<int:pk>/',
55+
user_views.GroupUserDetail.as_view(),
56+
name='user_groups-detail'),
57+
3458

3559
path('v1/downloadtokens/',
3660
core_views.FileDownloadTokenList.as_view(),
@@ -61,6 +85,30 @@
6185
path('v1/note<int:pk>/',
6286
feed_views.NoteDetail.as_view(), name='note-detail'),
6387

88+
path('v1/<int:pk>/grouppermissions/',
89+
feed_views.FeedGroupPermissionList.as_view(),
90+
name='feedgrouppermission-list'),
91+
92+
path('v1/<int:pk>/grouppermissions/search/',
93+
feed_views.FeedGroupPermissionListQuerySearch.as_view(),
94+
name='feedgrouppermission-list-query-search'),
95+
96+
path('v1/grouppermissions/<int:pk>/',
97+
feed_views.FeedGroupPermissionDetail.as_view(),
98+
name='feedgrouppermission-detail'),
99+
100+
path('v1/<int:pk>/userpermissions/',
101+
feed_views.FeedUserPermissionList.as_view(),
102+
name='feeduserpermission-list'),
103+
104+
path('v1/<int:pk>/userpermissions/search/',
105+
feed_views.FeedUserPermissionListQuerySearch.as_view(),
106+
name='feeduserpermission-list-query-search'),
107+
108+
path('v1/userpermissions/<int:pk>/',
109+
feed_views.FeedUserPermissionDetail.as_view(),
110+
name='feeduserpermission-detail'),
111+
64112
path('v1/<int:pk>/comments/',
65113
feed_views.CommentList.as_view(), name='comment-list'),
66114

@@ -358,26 +406,98 @@
358406
filebrowser_views.FileBrowserFolderChildList.as_view(),
359407
name='chrisfolder-child-list'),
360408

409+
path('v1/filebrowser/<int:pk>/grouppermissions/',
410+
filebrowser_views.FileBrowserFolderGroupPermissionList.as_view(),
411+
name='foldergrouppermission-list'),
412+
413+
path('v1/filebrowser/<int:pk>/grouppermissions/search/',
414+
filebrowser_views.FileBrowserFolderGroupPermissionListQuerySearch.as_view(),
415+
name='foldergrouppermission-list-query-search'),
416+
417+
path('v1/filebrowser/grouppermissions/<int:pk>/',
418+
filebrowser_views.FileBrowserFolderGroupPermissionDetail.as_view(),
419+
name='foldergrouppermission-detail'),
420+
421+
path('v1/filebrowser/<int:pk>/userpermissions/',
422+
filebrowser_views.FileBrowserFolderUserPermissionList.as_view(),
423+
name='folderuserpermission-list'),
424+
425+
path('v1/filebrowser/<int:pk>/userpermissions/search/',
426+
filebrowser_views.FileBrowserFolderUserPermissionListQuerySearch.as_view(),
427+
name='folderuserpermission-list-query-search'),
428+
429+
path('v1/filebrowser/userpermissions/<int:pk>/',
430+
filebrowser_views.FileBrowserFolderUserPermissionDetail.as_view(),
431+
name='folderuserpermission-detail'),
432+
361433
path('v1/filebrowser/<int:pk>/files/',
362434
filebrowser_views.FileBrowserFolderFileList.as_view(),
363435
name='chrisfolder-file-list'),
364436

365-
path('v1/filebrowser/<int:pk>/linkfiles/',
366-
filebrowser_views.FileBrowserFolderLinkFileList.as_view(),
367-
name='chrisfolder-linkfile-list'),
368-
369437
path('v1/filebrowser/files/<int:pk>/',
370438
filebrowser_views.FileBrowserFileDetail.as_view(),
371439
name='chrisfile-detail'),
372440

441+
path('v1/filebrowser/files/<int:pk>/grouppermissions/',
442+
filebrowser_views.FileBrowserFileGroupPermissionList.as_view(),
443+
name='filegrouppermission-list'),
444+
445+
path('v1/filebrowser/files/<int:pk>/grouppermissions/search/',
446+
filebrowser_views.FileBrowserFileGroupPermissionListQuerySearch.as_view(),
447+
name='filegrouppermission-list-query-search'),
448+
449+
path('v1/filebrowser/files/grouppermissions/<int:pk>/',
450+
filebrowser_views.FileBrowserFileGroupPermissionDetail.as_view(),
451+
name='filegrouppermission-detail'),
452+
453+
path('v1/filebrowser/files/<int:pk>/userpermissions/',
454+
filebrowser_views.FileBrowserFileUserPermissionList.as_view(),
455+
name='fileuserpermission-list'),
456+
457+
path('v1/filebrowser/files/<int:pk>/userpermissions/search/',
458+
filebrowser_views.FileBrowserFileUserPermissionListQuerySearch.as_view(),
459+
name='fileuserpermission-list-query-search'),
460+
461+
path('v1/filebrowser/files/userpermissions/<int:pk>/',
462+
filebrowser_views.FileBrowserFileUserPermissionDetail.as_view(),
463+
name='fileuserpermission-detail'),
464+
373465
re_path(r'^v1/filebrowser/files/(?P<pk>[0-9]+)/.*$',
374466
filebrowser_views.FileBrowserFileResource.as_view(),
375467
name='chrisfile-resource'),
376468

469+
path('v1/filebrowser/<int:pk>/linkfiles/',
470+
filebrowser_views.FileBrowserFolderLinkFileList.as_view(),
471+
name='chrisfolder-linkfile-list'),
472+
377473
path('v1/filebrowser/linkfiles/<int:pk>/',
378474
filebrowser_views.FileBrowserLinkFileDetail.as_view(),
379475
name='chrislinkfile-detail'),
380476

477+
path('v1/filebrowser/linkfiles/<int:pk>/grouppermissions/',
478+
filebrowser_views.FileBrowserLinkFileGroupPermissionList.as_view(),
479+
name='linkfilegrouppermission-list'),
480+
481+
path('v1/filebrowser/linkfiles/<int:pk>/grouppermissions/search/',
482+
filebrowser_views.FileBrowserLinkFileGroupPermissionListQuerySearch.as_view(),
483+
name='linkfilegrouppermission-list-query-search'),
484+
485+
path('v1/filebrowser/linkfiles/grouppermissions/<int:pk>/',
486+
filebrowser_views.FileBrowserLinkFileGroupPermissionDetail.as_view(),
487+
name='linkfilegrouppermission-detail'),
488+
489+
path('v1/filebrowser/linkfiles/<int:pk>/userpermissions/',
490+
filebrowser_views.FileBrowserLinkFileUserPermissionList.as_view(),
491+
name='linkfileuserpermission-list'),
492+
493+
path('v1/filebrowser/linkfiles/<int:pk>/userpermissions/search/',
494+
filebrowser_views.FileBrowserLinkFileUserPermissionListQuerySearch.as_view(),
495+
name='linkfileuserpermission-list-query-search'),
496+
497+
path('v1/filebrowser/linkfiles/userpermissions/<int:pk>/',
498+
filebrowser_views.FileBrowserLinkFileUserPermissionDetail.as_view(),
499+
name='linkfileuserpermission-detail'),
500+
381501
re_path(r'^v1/filebrowser/linkfiles/(?P<pk>[0-9]+)/.*$',
382502
filebrowser_views.FileBrowserLinkFileResource.as_view(),
383503
name='chrislinkfile-resource')

chris_backend/core/apps.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,52 @@
1+
12
from django.apps import AppConfig
3+
from django.db.models.signals import post_migrate
4+
5+
6+
def setup_chris(sender, **kwargs):
7+
from django.contrib.auth.models import User, Group
8+
from django.conf import settings
9+
from .models import ChrisInstance, ChrisFolder
10+
11+
ChrisInstance.load() # create the ChRIS instance singleton
12+
13+
# create superuser chris
14+
try:
15+
chris_user = User.objects.get(username='chris')
16+
except User.DoesNotExist:
17+
chris_user = User.objects.create_superuser('chris', '[email protected]',
18+
settings.CHRIS_SUPERUSER_PASSWORD)
19+
# create required groups
20+
(all_grp, _) = Group.objects.get_or_create(name='all_users')
21+
(pacs_grp, _) = Group.objects.get_or_create(name='pacs_users')
22+
23+
# create top level folders and their permissions
24+
(folder, _) = ChrisFolder.objects.get_or_create(path='', owner=chris_user,
25+
public=True)
26+
27+
(folder, _) = ChrisFolder.objects.get_or_create(path='home', owner=chris_user)
28+
if not folder.has_group_permission(all_grp):
29+
folder.grant_group_permission(all_grp, 'r')
30+
31+
(folder, _) = ChrisFolder.objects.get_or_create(path='SHARED', owner=chris_user)
32+
if not folder.has_group_permission(all_grp):
33+
folder.grant_group_permission(all_grp, 'r')
34+
35+
ChrisFolder.objects.get_or_create(path='PUBLIC', owner=chris_user, public=True)
36+
ChrisFolder.objects.get_or_create(path='PIPELINES', owner=chris_user, public=True)
37+
38+
(folder, _) = ChrisFolder.objects.get_or_create(path='SERVICES', owner=chris_user)
39+
if not folder.has_group_permission(all_grp):
40+
folder.grant_group_permission(all_grp, 'r')
41+
42+
(folder, _) = ChrisFolder.objects.get_or_create(path='SERVICES/PACS',
43+
owner=chris_user)
44+
if not folder.has_group_permission(pacs_grp):
45+
folder.grant_group_permission(pacs_grp, 'r')
246

347

448
class Core(AppConfig):
549
name = 'core'
50+
51+
def ready(self):
52+
post_migrate.connect(setup_chris, sender=self)

0 commit comments

Comments
 (0)