Created
March 16, 2016 20:40
-
-
Save JoshBarr/57c02fdac59f4e8c9205 to your computer and use it in GitHub Desktop.
Wagtail front-end permissions mixin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Mixin | |
class PermissionRequiredMixin: | |
required_permissions = [] | |
def route(self, request, path_components): | |
if not request.user.has_perms(self.required_permissions): | |
return RouteResult(self, kwargs={'permission_check_failed': True}) | |
return super().route(request, path_components) | |
def serve_permission_error(self, request): | |
""" | |
Respond with a polite message informing the user they need to log in | |
""" | |
raise NotImplementedError | |
def serve(self, request, *args, permission_check_failed=False, **kwargs): | |
if permission_check_failed: | |
return self.serve_permission_error(request) | |
return super().serve(request, *args, **kwargs) | |
# Implementation: | |
class ClientAreaHomePage(PermissionRequiredMixin, Page): | |
required_permissions = ['client_area.can_access_client_area'] | |
def serve_permission_error(self, request): | |
return TemplateResponse(request, 'login.html') | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment