Loading...
Loading...
Audit and harden Convex authorization: identity-from-arg impersonation, missing per-document ownership checks, PII-leaking public queries, and writes into containers the caller doesn't own. Deterministic scan + canonical requireIdentity/requireOwner fix + tsc verify. Use for 'secure my app' / 'audit auth' / 'who can access this data', not generic code review.
npx skill4agent add get-convex/agent-skills convex-authz/add authquery(mutation(argsuserIdactorIdownerIdauthorIdaccountIdv.id(...)ctx.auth/\b(userId|actorId|ownerId|authorId|accountId)\s*:\s*v\.id\(/args: { ... }/\bctx\.auth\b/(query|mutation)\(\s*\{ ... }query(mutation(ctx.db.get(args.<xId>)_idctx.db.patchctx.db.deletectx.db.replace<doc>.<ownerField>===!==identity.subjectctx.authquery(returnsemailrevenuessnpasswordtokenauditLogdashboardctx.authmutation(v.id(...)projectIdboardIdteamIdorgIdlistIdfolderIdconversationIdaccountIdctx.db.insertctx.db.patchv.id(...)convex/model/auth.tsrequireIdentity(ctx)ctx.auth.getUserIdentity()requireOwner(ctx, doc)doc.ownerId !== identity.subjectrequireIdentity(ctx)_idrequireOwner(ctx, await ctx.db.get(args.xId))requireIdentityrequireOwnerrequireOwner(ctx, parent)participantIds.includes(user._id)usersusersuser._idId<"users">identity.subjectinternalQueryinternalMutationnpx tsc --noEmitctx.auth