Skip to content

Commit

Permalink
fix: some cleanup + user can't edit their own role
Browse files Browse the repository at this point in the history
  • Loading branch information
thomhickey committed Nov 19, 2024
1 parent 3f926e9 commit 31b87a5
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 10 deletions.
15 changes: 15 additions & 0 deletions src/backend/routers/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,21 @@ export const user = router({
.mutation(async (req) => {
const { user_id, first_name, last_name, email, role } = req.input;

const { userId } = req.ctx.auth;

const dbUser = await req.ctx.db
.selectFrom("user")
.where("user_id", "=", user_id)
.selectAll()
.executeTakeFirstOrThrow();

if (userId === user_id && dbUser.role !== role) {
throw new TRPCError({
code: "BAD_REQUEST",
message: "You cannot change your own role",
});
}

return await req.ctx.db
.updateTable("user")
.set({
Expand Down
6 changes: 3 additions & 3 deletions src/components/table/renderers.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { TextField } from "@mui/material";
import { Dropdown } from "@/components/design_system/dropdown/Dropdown";
import { ColumnDefinition, BaseEntity, SelectOption } from "./types";
import { ColumnDefinition, UserBase, SelectOption } from "./types";

export function renderTableInput<T extends BaseEntity>(
export function renderTableInput<T extends UserBase>(
column: ColumnDefinition<T>,
value: T[keyof T] | undefined,
onChange: (value: T[keyof T]) => void
Expand Down Expand Up @@ -41,7 +41,7 @@ export function renderTableInput<T extends BaseEntity>(
}
}

export function renderTableCell<T extends BaseEntity>(
export function renderTableCell<T extends UserBase>(
column: ColumnDefinition<T>,
value: T[keyof T]
): React.ReactNode {
Expand Down
4 changes: 2 additions & 2 deletions src/components/table/table2.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import { styled } from "@mui/material/styles";
import { visuallyHidden } from "@mui/utils";
import SearchIcon from "@mui/icons-material/Search";
import { TableProps, BaseEntity } from "./types";
import { TableProps, UserBase } from "./types";
import { renderTableInput, renderTableCell } from "./renderers";
import $table from "./Table.module.css";
import $button from "@/components/design_system/button/Button.module.css";
Expand All @@ -29,7 +29,7 @@ const StyledTableRow = styled(TableRow)(() => ({
},
}));

export function Table2<T extends BaseEntity>({
export function Table2<T extends UserBase>({
data,
columns,
type,
Expand Down
6 changes: 3 additions & 3 deletions src/components/table/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { Roles } from "@/types/auth";

export type ColumnType = "text" | "number" | "select" | "date";

export interface BaseEntity {
export interface UserBase {
id?: string | number;
first_name: string;
last_name: string;
Expand All @@ -15,7 +15,7 @@ export interface SelectOption {
label: string;
}

export interface ColumnDefinition<T extends BaseEntity> {
export interface ColumnDefinition<T extends UserBase> {
id: keyof T;
label: string;
type: ColumnType;
Expand All @@ -24,7 +24,7 @@ export interface ColumnDefinition<T extends BaseEntity> {
customRender?: (value: T[keyof T]) => React.ReactNode;
}

export interface TableProps<T extends BaseEntity> {
export interface TableProps<T extends UserBase> {
data: T[];
columns: ColumnDefinition<T>[];
type: string;
Expand Down
4 changes: 2 additions & 2 deletions src/pages/admin/index.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { requiresAdminAuth } from "@/client/lib/protected-page";
import { trpc } from "@/client/lib/trpc";
import { Table2 } from "@/components/table/table2";
import { ColumnDefinition, BaseEntity } from "@/components/table/types";
import { ColumnDefinition, UserBase } from "@/components/table/types";
import { useRouter } from "next/router";
import { useState } from "react";
import { ROLE_OPTIONS, Roles } from "@/types/auth";
import { getRoleLabel } from "@/types/auth";
import { sortBySchema, sortOrderSchema } from "@/backend/routers/user";
import { z } from "zod";

interface User extends BaseEntity {
interface User extends UserBase {
user_id: string;
first_name: string;
last_name: string;
Expand Down

0 comments on commit 31b87a5

Please sign in to comment.