Skip to content

Commit c3a79e7

Browse files
feat(traceability matrix manager): [closes-TMM-1, TMM-2, TMM-3] add API code for traceability matrix manager (#1)
1 parent f68f6e0 commit c3a79e7

Some content is hidden

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

73 files changed

+1997
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,7 @@ cython_debug/
158158
# and can be added to the global gitignore or merged into this file. For a more nuclear
159159
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
160160
#.idea/
161+
162+
163+
.vscode
164+
/media/

custompermissions/__init__.py

Whitespace-only changes.

custompermissions/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

custompermissions/apps.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.apps import AppConfig
2+
3+
4+
class CustompermissionsConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'custompermissions'
7+
8+
def ready(self):
9+
from . import signals

custompermissions/migrations/__init__.py

Whitespace-only changes.

custompermissions/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.db import models
2+
3+
# Create your models here.

custompermissions/permissions.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from rest_framework.permissions import BasePermission
2+
from django.contrib.auth import get_user_model
3+
from eventrecord.models import EventRecord
4+
5+
from project.models import Project
6+
from record.models import Record
7+
8+
User = get_user_model()
9+
grp = " Group";
10+
11+
class AdminPermission(BasePermission):
12+
def has_permission(self, request, view):
13+
return request.user and request.user.groups.filter(name=User.Role.Admin + grp).exists()
14+
15+
class TeamMemberPermission(BasePermission):
16+
def has_permission(self, request, view):
17+
return request.user and request.user.groups.filter(name=User.Role.TeamMember + grp).exists()
18+
19+
def has_object_permission(self, request, view, obj):
20+
if isinstance(obj, Project):
21+
return obj.assignedUsers.filter(id=request.user.id).exists()
22+
elif isinstance(obj, Record):
23+
project = obj.associatedProject
24+
return project.assignedUsers.filter(id=request.user.id).exists()
25+
elif isinstance(obj, EventRecord):
26+
return True
27+
return False
28+
29+
class GuestPermission(BasePermission):
30+
def has_permission(self, request, view):
31+
return request.user and request.user.groups.filter(name=User.Role.Guest + grp).exists()
32+
33+
def has_object_permission(self, request, view, obj):
34+
if isinstance(obj, Project):
35+
return obj.assignedUsers.filter(id=request.user.id).exists()
36+
elif isinstance(obj, Record):
37+
project = obj.associatedProject
38+
return project.assignedUsers.filter(id=request.user.id).exists()
39+
elif isinstance(obj, EventRecord):
40+
return True
41+
return False

custompermissions/signals.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from django.db.models.signals import post_migrate
2+
from django.contrib.auth.models import Group, Permission
3+
from django.contrib.auth import get_user_model
4+
from django.dispatch import receiver
5+
6+
User = get_user_model()
7+
8+
@receiver(post_migrate)
9+
def create_groups_and_permissions(sender, **kwargs):
10+
grp = " Group"
11+
adminGroup, _ = Group.objects.get_or_create(name=User.Role.Admin + grp)
12+
teamMemberGroup, _ = Group.objects.get_or_create(name=User.Role.TeamMember + grp)
13+
guestGroup, _ = Group.objects.get_or_create(name=User.Role.Guest + grp)
14+
15+
permissionsAdmin = Permission.objects.filter(
16+
codename__in=[
17+
"view_eventrecord",
18+
"add_eventrecord",
19+
"view_project",
20+
"add_project",
21+
"change_project",
22+
"delete_project",
23+
"add_record",
24+
"view_record",
25+
"change_record",
26+
"delete_record",
27+
"view_user",
28+
"add_user",
29+
"change_user",
30+
"delete_user",
31+
]
32+
)
33+
adminGroup.permissions.set(permissionsAdmin)
34+
35+
permissionsTM = Permission.objects.filter(
36+
codename__in=[
37+
"view_eventrecord",
38+
"add_eventrecord",
39+
"view_project",
40+
"view_record",
41+
"add_record",
42+
"change_record",
43+
"delete_record",
44+
]
45+
)
46+
teamMemberGroup.permissions.set(permissionsTM)
47+
48+
permissionsGuest = Permission.objects.filter(
49+
codename__in=[
50+
"view_eventrecord",
51+
"add_eventrecord",
52+
"view_project",
53+
"view_record",
54+
]
55+
)
56+
guestGroup.permissions.set(permissionsGuest)

custompermissions/tests.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

custompermissions/views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.shortcuts import render
2+
3+
# Create your views here.

0 commit comments

Comments
 (0)