Add permision check to timerboard dashboard view

This commit is contained in:
Aaron Kable 2024-03-08 15:54:39 +08:00
parent a1d712694c
commit 7a9808aad3

View File

@ -20,6 +20,9 @@ from allianceauth.timerboard.models import Timer
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
TIMER_VIEW_PERMISSION = 'auth.timer_view'
TIMER_MANAGE_PERMISSION = 'auth.timer_management'
class BaseTimerView(LoginRequiredMixin, PermissionRequiredMixin, View): class BaseTimerView(LoginRequiredMixin, PermissionRequiredMixin, View):
pass pass
@ -27,7 +30,7 @@ class BaseTimerView(LoginRequiredMixin, PermissionRequiredMixin, View):
class TimerView(BaseTimerView): class TimerView(BaseTimerView):
template_name = 'timerboard/view.html' template_name = 'timerboard/view.html'
permission_required = 'auth.timer_view' permission_required = TIMER_VIEW_PERMISSION
def get(self, request): def get(self, request):
logger.debug(f"timer_view called by user {request.user}") logger.debug(f"timer_view called by user {request.user}")
@ -48,7 +51,7 @@ class TimerView(BaseTimerView):
class TimerManagementView(BaseTimerView): class TimerManagementView(BaseTimerView):
permission_required = 'auth.timer_management' permission_required = TIMER_MANAGE_PERMISSION
index_redirect = 'timerboard:view' index_redirect = 'timerboard:view'
success_url = reverse_lazy(index_redirect) success_url = reverse_lazy(index_redirect)
model = Timer model = Timer
@ -74,8 +77,13 @@ class AddTimerView(TimerManagementView, AddUpdateMixin, CreateView):
def form_valid(self, form): def form_valid(self, form):
result = super().form_valid(form) result = super().form_valid(form)
timer = self.object timer = self.object
logger.info(f"Created new timer in {timer.system} at {timer.eve_time} by user {self.request.user}") logger.info(
messages.success(self.request, _('Added new timer in %(system)s at %(time)s.') % {"system": timer.system, "time": timer.eve_time}) f"Created new timer in {timer.system} at {timer.eve_time} by user {self.request.user}"
)
messages.success(
self.request,
_('Added new timer in %(system)s at %(time)s.') % {"system": timer.system, "time": timer.eve_time}
)
return result return result
@ -93,18 +101,29 @@ class RemoveTimerView(TimerManagementView, DeleteView):
def dashboard_timers(request): def dashboard_timers(request):
if request.user.has_perm(TIMER_VIEW_PERMISSION):
try: try:
corp = request.user.profile.main_character.corporation corp = request.user.profile.main_character.corporation
except (EveCorporationInfo.DoesNotExist, AttributeError): except (EveCorporationInfo.DoesNotExist, AttributeError):
return "" return ""
timers = Timer.objects.select_related('eve_character').filter((Q(eve_corp__isnull=True) | Q(eve_corp=corp)) ,eve_time__gte=timezone.now())[:5] timers = Timer.objects.select_related(
'eve_character'
).filter(
(Q(eve_corp__isnull=True) | Q(eve_corp=corp)),
eve_time__gte=timezone.now()
)[:5]
if timers.count(): if timers.count():
context = { context = {
'timers': timers, 'timers': timers,
} }
return render_to_string(template_name='timerboard/dashboard.timers.html', context=context, request=request) return render_to_string(
template_name='timerboard/dashboard.timers.html',
context=context, request=request
)
else:
return ""
else: else:
return "" return ""