makeplane/plane · error · CommandError

User not member in workspace

Error message

User not member in workspace

What it means

Raised by `create_project_member` when the user is not an ACTIVE member of the project's workspace: `WorkspaceMember.objects.filter(workspace=project.workspace, member=user, is_active=True).exists()` is False (lines 51-52). Project membership requires active workspace membership first. Swallowed by the command's `except CommandError`.

Source

Thrown at apps/api/plane/db/management/commands/create_project_member.py:52

            project_id = options["project_id"]
            user_email = options["user_email"]
            role = options.get("role", 20)

            print(f"Role: {role}")

            user = User.objects.filter(email=user_email).first()
            if not user:
                raise CommandError("User not found")

            # Check if the project exists
            project = Project.objects.filter(pk=project_id).first()
            if not project:
                raise CommandError("Project not found")

            # Check if the user exists in the workspace
            if not WorkspaceMember.objects.filter(workspace=project.workspace, member=user, is_active=True).exists():
                raise CommandError("User not member in workspace")


            if ProjectMember.objects.filter(project=project, member=user).exists():
                # Update the project member
                ProjectMember.objects.filter(project=project, member=user).update(
                    is_active=True, role=role
                )
            else:
                # Create the project member
                ProjectMember.objects.create(project=project, member=user, role=role)

            # Issue Property
            ProjectUserProperty.objects.get_or_create(user=user, project=project)

            # Success message
            self.stdout.write(self.style.SUCCESS(f"User {user_email} added to project {project_id}"))
            return
        except CommandError as e:

View on GitHub (pinned to 1c8a60f858)

Solutions

  1. Add/reactivate the workspace member first (see `reactivate_workspace_member` command, errors 95-99).
  2. Verify membership: `python manage.py shell -c "from plane.db.models import WorkspaceMember; print(WorkspaceMember.objects.filter(member__email='x@example.com', is_active=True).values('workspace__slug'))"`
  3. Ensure `is_active=True` on the WorkspaceMember row before re-running.

Example fix

# before: user not an active workspace member
python manage.py create_project_member --project_id <uuid> --user_email x@example.com
# after: reactivate workspace membership first
python manage.py reactivate_workspace_member <slug> x@example.com
python manage.py create_project_member --project_id <uuid> --user_email x@example.com
Defensive patterns

Strategy: validation

Validate before calling

python manage.py shell -c "from plane.db.models import WorkspaceMember; import sys; sys.exit(0 if WorkspaceMember.objects.filter(member__email='x@example.com', is_active=True).exists() else 1)"

Type guard

def is_active_workspace_member(slug: str, email: str) -> bool:
    from plane.db.models import WorkspaceMember
    return WorkspaceMember.objects.filter(workspace__slug=slug, member__email=email, is_active=True).exists()

Try / catch

# Command swallows CommandError; ensure active workspace membership first.
# If inactive, run: reactivate_workspace_member <slug> <email>

Prevention

When it happens

Trigger: The user was never added to the workspace, was removed (deactivated), or their WorkspaceMember row has `is_active=False`.

Common situations: Member was removed from the workspace but you try to re-add them to a project directly; user invited to workspace but never accepted; attempting to bypass workspace membership.

Related errors


AI-assisted analysis of makeplane/plane@1c8a60f858 (2026-08-12). Data as JSON: /api/errors/8f65f8d6b1dad11e. Report an issue: GitHub.