Skip to content

Commit dff8dc7

Browse files
commit permission
1 parent 012e90b commit dff8dc7

File tree

7 files changed

+98
-34
lines changed

7 files changed

+98
-34
lines changed

User/admin.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,24 +81,35 @@ class UserAdmin(BaseUserAdmin):
8181
# list_display = ('username', 'password', 'email', 'is_staff')
8282
list_display = ('username', 'password', 'email', 'date_joined',
8383
'is_staff', 'is_superuser', 'is_active',)
84-
filter_horizontal = ('groups', 'user_permissions')
84+
8585
list_filter = ('is_staff',)
8686
fieldsets = (
87-
(None, {'fields': ('email', 'password')}),
88-
('Permissions', {'fields': ('is_staff', 'is_superuser', 'is_active', 'groups', 'user_permissions',)}),
87+
(None, {'fields': ('first_name', 'email', 'password')}),
88+
('Permissions', {'fields': ('is_staff', 'is_superuser', 'is_active', )}),
8989
)
9090
# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
9191
# overrides get_fieldsets to use this attribute when creating a user.
9292
add_fieldsets = (
9393
(None, {
9494
'classes': ('wide',),
95-
'fields': ('username', 'email', 'password1', 'password2', 'is_staff', 'is_superuser', 'is_active', 'groups',
95+
'fields': ('username', 'email', 'password1', 'password2', 'is_staff', 'is_superuser', 'is_active',
9696
'user_permissions'),
9797
}),
9898
)
99+
filter_horizontal = ('user_permissions',)
99100
search_fields = ('email',)
100101
ordering = ('email',)
101102

103+
def get_queryset(self, request):
104+
queryset = super().get_queryset(request)
105+
if request.user.is_superuser:
106+
queryset = User.objects.all()
107+
else:
108+
try:
109+
queryset = User.objects.filter(username=request.user.username)
110+
except:
111+
queryset = User.objects.none()
112+
return queryset
102113

103114
# Register your models Teacher.
104115
admin.site.register(User, UserAdmin)

User/models.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.db import models
2-
2+
from guardian.shortcuts import assign_perm
33
# Create your models here.
44
import os
55
from uuid import uuid4
@@ -74,9 +74,6 @@ class User(AbstractUser):
7474
def __str__(self):
7575
return self.email
7676

77-
def has_perm(self, perm, obj=None):
78-
return self.is_superuser
79-
"""
8077
def has_perm(self, perm, obj=None):
8178
if self.is_superuser:
8279
return True
@@ -85,18 +82,26 @@ def has_perm(self, perm, obj=None):
8582
perm == 'student.delete_student' or perm == 'student.view_student' or \
8683
perm == 'student.add_studentimagesdata' or perm == 'student.change_studentimagesdata' or \
8784
perm == 'student.delete_studentimagesdata' or perm == 'student.view_studentimagesdata' or \
88-
perm == 'teacher.add_teacher' or perm == 'teacher.change_teacher' or \
89-
perm == 'teacher.delete_teacher' or perm == 'teacher.view_teacher' or \
9085
perm == 'course.add_course' or perm == 'course.change_course' or \
9186
perm == 'course.delete_course' or perm == 'course.view_course' or \
9287
perm == 'course.add_schedule' or perm == 'course.change_schedule' or \
9388
perm == 'course.delete_schedule' or perm == 'course.view_schedule' or \
9489
perm == 'course.add_scheduleimagesdata' or perm == 'course.change_scheduleimagesdata' or \
9590
perm == 'course.delete_scheduleimagesdata' or perm == 'course.view_scheduleimagesdata' or \
9691
perm == 'course.add_attendance' or perm == 'course.change_attendance' or \
97-
perm == 'course.delete_attendance' or perm == 'course.view_attendance':
92+
perm == 'course.delete_attendance' or perm == 'course.view_attendance' or \
93+
perm == 'User.add_user' or perm == 'User.change_user' or \
94+
perm == 'User.delete_user' or perm == 'User.view_user' or \
95+
perm == 'teacher.add_teacher' or perm == 'teacher.change_teacher' or \
96+
perm == 'teacher.delete_teacher' or perm == 'teacher.view_teacher':
9897
return True
99-
"""
98+
if self.is_student:
99+
if perm == 'student.change_student' or perm == 'student.view_student' or \
100+
perm == 'course.add_course' or perm == 'course.change_course' or \
101+
perm == 'course.view_course' or perm == 'course.view_schedule' or \
102+
perm == 'course.view_scheduleimagesdata' or perm == 'course.view_attendance':
103+
return True
104+
100105
def has_module_perms(self, app_label):
101106
"""Does the user have permissions to view the app `app_label`?"""
102107
# Simplest possible answer: Yes, always

course/admin.py

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
from import_export.resources import ModelResource
6060
from student.models import Student
6161
from student.admin import StudentAdmin
62+
import json
6263

6364

6465
# Register your models here.
@@ -96,6 +97,22 @@ class CourseAdmin(ImportExportModelAdmin):
9697
date_hierarchy = 'start_day'
9798
raw_id_fields = ["teacher", ]
9899

100+
def get_queryset(self, request):
101+
queryset = super().get_queryset(request)
102+
queryset = queryset.annotate(
103+
student_count=Count("students", distinct=True),
104+
)
105+
106+
if request.user.is_superuser:
107+
queryset = Course.objects.all().annotate(student_count=Count("students", distinct=True), )
108+
else:
109+
try:
110+
queryset = Course.objects.filter(teacher=request.user.username).annotate(
111+
student_count=Count("students", distinct=True), )
112+
except:
113+
queryset = Course.objects.none().annotate(student_count=Count("students", distinct=True), )
114+
return queryset
115+
99116
def get_readonly_fields(self, request, obj=None):
100117
if obj: # editing an existing object
101118
return self.readonly_fields + ['course_code', ]
@@ -121,13 +138,6 @@ def children_display(self, obj):
121138

122139
children_display.short_description = "Students List"
123140

124-
def get_queryset(self, request):
125-
queryset = super().get_queryset(request)
126-
queryset = queryset.annotate(
127-
student_count=Count("students", distinct=True),
128-
)
129-
return queryset
130-
131141
@staticmethod
132142
def student_count(obj):
133143
# return obj.students.count()
@@ -306,6 +316,17 @@ class ScheduleAdmin(admin.ModelAdmin):
306316
list_per_page = 20
307317
raw_id_fields = ["course", ]
308318

319+
def get_queryset(self, request):
320+
queryset = super().get_queryset(request)
321+
if request.user.is_superuser:
322+
queryset = Schedule.objects.all()
323+
else:
324+
try:
325+
queryset = Schedule.objects.filter(course__teacher__username=request.user.username)
326+
except:
327+
queryset = Course.objects.none()
328+
return queryset
329+
309330
@staticmethod
310331
def course_info(obj):
311332
return obj.course.course_name + " - " + obj.course.course_code + ""
@@ -355,6 +376,17 @@ class AttendanceAdmin(admin.ModelAdmin):
355376
list_per_page = 20
356377
raw_id_fields = ["schedule_code", "student"]
357378

379+
def get_queryset(self, request):
380+
queryset = super().get_queryset(request)
381+
if request.user.is_superuser:
382+
queryset = Attendance.objects.all()
383+
else:
384+
try:
385+
queryset = Attendance.objects.filter(schedule_code__course__teacher__username=request.user.username)
386+
except:
387+
queryset = Attendance.objects.none()
388+
return queryset
389+
358390
# def get_readonly_fields(self, request, obj=None):
359391
# if obj: # editing an existing object
360392
# return self.readonly_fields + ('student_info', 'field2')

course/models.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,6 @@ class ScheduleImagesData(models.Model):
201201
schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE, null=False)
202202

203203
def path_and_rename(self, name):
204-
# get filename course_code = list(Schedule.objects.filter(schedule_code=self.schedule).values_list(
205-
# 'course__course_code', flat=True).distinct())[0]
206204
course_code, schedule_number_of_day = list(
207205
Schedule.objects.filter(schedule_code=self.schedule).values_list('course__course_code',
208206
'schedule_number_of_day').distinct())[0]

student/admin.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,26 +71,27 @@ class StudentAdmin(ImportExportModelAdmin,):
7171
'first_name': 'Full Name'
7272
}
7373
list_display = (
74-
'student_code', 'get_full_name', 'email', 'username', 'password',
75-
'comment',)
74+
'student_code', 'get_full_name', 'email', 'username',)
7675
readonly_fields = []
7776
list_filter = ('student_code',)
7877
search_fields = ('student_code',)
7978
inlines = (ImageInline,)
8079
fieldsets = (
8180
(None, {
82-
'fields': ('student_code', 'first_name', 'email', 'student_video_data', 'comment',)
81+
'fields': ('student_code', 'password', 'first_name', 'email', 'student_video_data', 'comment',)
8382
}),
84-
('Options', {
85-
'fields': ('username', 'password',),
86-
'description': 'option advance',
87-
'classes': ('collapse',),
83+
)
84+
85+
add_fieldsets = (
86+
(None, {
87+
# 'classes': ('wide',),
88+
'fields': ('student_code', 'first_name', 'email', 'password1', 'password2',),
8889
}),
8990
)
9091

9192
def get_readonly_fields(self, request, obj=None):
9293
if obj: # editing an existing object
93-
return self.readonly_fields + ['student_code', ]
94+
return self.readonly_fields + ['student_code', 'username', 'password']
9495
return self.readonly_fields
9596

9697
def get_full_name(self, obj):

teacher/admin.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,25 +39,36 @@ class TeacherAdmin(ImportExportModelAdmin):
3939
fieldsets = (
4040
(None, {
4141
'fields': (
42-
'teacher_code', 'first_name', 'email', 'teacher_image',
43-
'password', 'is_staff', 'is_active', 'is_superuser', 'groups', 'user_permissions', ),
42+
'teacher_code', 'password', 'first_name', 'email', 'teacher_image',
43+
),
4444
}),
4545
('Advance options', {
4646
'fields': ('date_joined', 'teacher_full_image_show'),
4747
'description': 'option advance',
48-
'classes': ('collapse',),
48+
'classes': ('',),
49+
# colapse
4950
}),
5051
)
5152
list_filter = (
5253
('teacher_code', DropdownFilter),
53-
# ('Course', RelatedDropdownFilter)
5454
)
5555

5656
filter_horizontal = ('groups', 'user_permissions')
5757

58+
def get_queryset(self, request):
59+
queryset = super().get_queryset(request)
60+
if request.user.is_superuser:
61+
queryset = Teacher.objects.all()
62+
else:
63+
try:
64+
queryset = Teacher.objects.filter(username=request.user.username)
65+
except:
66+
queryset = Teacher.objects.none()
67+
return queryset
68+
5869
def get_readonly_fields(self, request, obj=None):
5970
if obj: # editing an existing object
60-
return self.readonly_fields + ['teacher_code', ]
71+
return self.readonly_fields + ['teacher_code', 'username', 'is_superuser']
6172
return self.readonly_fields
6273

6374
@staticmethod

teacher/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.db import models
22
from django.contrib.auth.models import AbstractUser
33
from User.models import User
4+
from guardian.shortcuts import assign_perm
45
# -*- coding: utf-8 -*-
56

67

@@ -22,6 +23,8 @@ def days_since_creation(self):
2223

2324
class Meta:
2425
verbose_name_plural = 'Quản lý giáo viên'
26+
permissions = (
27+
)
2528

2629
def __str__(self):
2730
return self.first_name + self.last_name
@@ -38,3 +41,6 @@ def save(self, *args, **kwargs):
3841
self.password = "" + self.teacher_code
3942
self.set_password(self.password)
4043
super(Teacher, self).save(*args, **kwargs)
44+
45+
def __init__(self, *args, **kwargs):
46+
super(Teacher, self).__init__(*args, **kwargs)

0 commit comments

Comments
 (0)