feat(marketplace): per-person marketplace access control backend#8505
Open
LWS49 wants to merge 1 commit into
Open
feat(marketplace): per-person marketplace access control backend#8505LWS49 wants to merge 1 commit into
LWS49 wants to merge 1 commit into
Conversation
LWS49
force-pushed
the
lws49/feat-marketplace-pr6b-backend
branch
from
July 22, 2026 05:22
c1b9c90 to
b0b796d
Compare
LWS49
force-pushed
the
lws49/feat-marketplace-pr6a-factories
branch
from
July 22, 2026 05:39
f8c6959 to
8e63f2b
Compare
Gate assessment-marketplace browsing per person rather than per current-course role. A typed allow-list (user / instance / email-domain / everyone rules) grants access to baseline-capable users (course manager/owner or instance instructor/admin anywhere), with individual access blocks as overrides. - AllowlistRule and AccessBlock models, migrations, and per-type uniqueness - RuleMatchQuery / RulePreviewQuery / AccessListQuery for matching and audit - ability component gates :access_marketplace on the allow-list minus blocks - User baseline predicates and delete-user FK handling for both tables - System::Admin CRUD, access-list, and block/unblock endpoints
LWS49
force-pushed
the
lws49/feat-marketplace-pr6b-backend
branch
from
July 22, 2026 05:40
b0b796d to
c7e43f9
Compare
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Gates assessment-marketplace browsing per person instead of per current-course role. A typed allow-list - specific user, whole instance, email domain, or everyone - grants access to baseline-capable users, meaning anyone who manages or owns a course anywhere or is an instance instructor/administrator. Per-user access blocks override the allow-list. This PR adds the models and migrations, the matching and audit queries, the ability component that gates
:access_marketplace, and the System::Admin endpoints the following PRs consume. No UI yet.Design decisions
rule_typediscriminator rather than a table per rule kind - the types share every field that matters and differ only in which target column is set, so separate tables would duplicate the CRUD, serialization and matching code for no gain.Regression prevention
Covers: rule creation per type and rejection of duplicates, resolution of an email to its owning user, everyone-mode reporting, rule deletion, preview counts including blocked matches and their ordering, access-list annotation and serialization, block create and destroy, ability gating for eligible, ineligible and blocked users, and the user baseline predicates.