HyperSaaS
BackendAuthentication

Permissions

DRF permission classes for workspace and team access control.

Default Permission

All API endpoints require authentication by default:

"DEFAULT_PERMISSION_CLASSES": ("rest_framework.permissions.IsAuthenticated",)

Workspace Permissions

Defined in backend/workspaces/permissions.py:

Permission ClassReadWriteDelete
IsWorkspaceMemberMemberMemberMember
IsWorkspaceOwnerOrAdminOwner/AdminOwner/AdminOwner/Admin
IsWorkspaceMemberForReadOwnerOrAdminForWriteMemberOwner/AdminOwner/Admin
CanManageWorkspaceMembershipMemberOwner/AdminOwner/Admin

Team Permissions

Permission ClassReadWriteDelete
IsTeamMemberMemberMemberMember
IsTeamPrivilegedUserOwner/AdminOwner/AdminOwner/Admin
IsTeamMemberForReadTeamPrivilegedUserForWriteMemberOwner/AdminOwner/Admin
CanManageTeamMembershipMemberOwner/AdminOwner/Admin

Document Permissions

Permission ClassDescription
CanAccessDocumentUser can access the document within their workspace

Other Permissions

Permission ClassDescription
IsModelOwnerUser is the creator/owner of the specific object

Roles

Two roles are defined in backend/workspaces/roles.py:

ROLE_ADMIN = "admin"
ROLE_MEMBER = "member"

Roles apply to both workspace memberships and team memberships. The workspace owner has implicit admin-level access regardless of their membership role.

Usage in ViewSets

class ChatSessionViewSet(ModelViewSet):
    permission_classes = [IsAuthenticated, IsWorkspaceMember]

    def get_queryset(self):
        return ChatSession.objects.filter(
            workspace_id=self.kwargs["workspace_pk"],
            workspace__members=self.request.user,
        )

Every workspace-scoped ViewSet:

  1. Checks authentication
  2. Checks workspace membership
  3. Filters querysets to the workspace from the URL

On this page