nickname
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { query, mutation, internalQuery, internalMutation } from "./_generated/server";
|
||||
import { v } from "convex/values";
|
||||
import { getPublicStorageUrl } from "./storageUrl";
|
||||
import { getRolesForUser } from "./roles";
|
||||
|
||||
async function sha256Hex(input: string): Promise<string> {
|
||||
const buffer = await crypto.subtle.digest(
|
||||
@@ -165,6 +166,7 @@ export const createUserWithProfile = mutation({
|
||||
manage_channels: true,
|
||||
manage_roles: true,
|
||||
manage_messages: true,
|
||||
manage_nicknames: true,
|
||||
create_invite: true,
|
||||
embed_links: true,
|
||||
attach_files: true,
|
||||
@@ -337,6 +339,34 @@ export const getUserForRecovery = internalQuery({
|
||||
},
|
||||
});
|
||||
|
||||
// Set nickname (displayName) for a user
|
||||
export const setNickname = mutation({
|
||||
args: {
|
||||
actorUserId: v.id("userProfiles"),
|
||||
targetUserId: v.id("userProfiles"),
|
||||
displayName: v.string(),
|
||||
},
|
||||
returns: v.null(),
|
||||
handler: async (ctx, args) => {
|
||||
// Self-changes are always allowed
|
||||
if (args.actorUserId !== args.targetUserId) {
|
||||
const roles = await getRolesForUser(ctx, args.actorUserId);
|
||||
const canManage = roles.some(
|
||||
(role) => (role.permissions as Record<string, boolean>)?.["manage_nicknames"]
|
||||
);
|
||||
if (!canManage) {
|
||||
throw new Error("You don't have permission to change other users' nicknames");
|
||||
}
|
||||
}
|
||||
|
||||
const trimmed = args.displayName.trim();
|
||||
await ctx.db.patch(args.targetUserId, {
|
||||
displayName: trimmed || undefined,
|
||||
});
|
||||
return null;
|
||||
},
|
||||
});
|
||||
|
||||
// Internal: update credentials after password reset
|
||||
export const updateCredentials = internalMutation({
|
||||
args: {
|
||||
|
||||
Reference in New Issue
Block a user