From 2807032e574af331563e4ceb3262a80e8ed43744 Mon Sep 17 00:00:00 2001
From: alphaeusmote <41258468-alphaeusmote@users.noreply.replit.com>
Date: Fri, 11 Apr 2025 16:02:40 +0000
Subject: [PATCH] Remove group management features
Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 9111ef36-26c8-4085-84ca-a35dc1fec1b5
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/7083d608-d6d3-4a6a-9a27-6286c5109627/82dd356d-de75-48ec-9440-0b6038dcd8ca.jpg
---
.../src/components/layouts/mobile-sidebar.tsx | 10 +-
client/src/components/layouts/sidebar.tsx | 8 +-
server/database-storage.ts | 49 +-------
server/routes.ts | 2 -
shared/schema.ts | 110 ++----------------
5 files changed, 15 insertions(+), 164 deletions(-)
diff --git a/client/src/components/layouts/mobile-sidebar.tsx b/client/src/components/layouts/mobile-sidebar.tsx
index 2ee8c01..cde6c2e 100644
--- a/client/src/components/layouts/mobile-sidebar.tsx
+++ b/client/src/components/layouts/mobile-sidebar.tsx
@@ -65,16 +65,16 @@ export function MobileSidebar({ isOpen, onClose }: MobileSidebarProps) {
// Define admin navigation items
const adminNavItems = [
{
- title: "Users & Roles",
+ title: "Users",
href: "/users-roles",
icon: ,
roles: ["admin"],
},
{
- title: "Groups",
- href: "/groups",
- icon: ,
- roles: ["admin", "manager"],
+ title: "Roles",
+ href: "/roles",
+ icon: ,
+ roles: ["admin"],
},
{
title: "Webhooks",
diff --git a/client/src/components/layouts/sidebar.tsx b/client/src/components/layouts/sidebar.tsx
index 20c25e0..4386d58 100644
--- a/client/src/components/layouts/sidebar.tsx
+++ b/client/src/components/layouts/sidebar.tsx
@@ -62,17 +62,11 @@ export function Sidebar() {
// Define admin navigation items
const adminNavItems = [
{
- title: "Users & Roles",
+ title: "Users",
href: "/users-roles",
icon: ,
roles: ["admin"],
},
- {
- title: "Groups",
- href: "/groups",
- icon: ,
- roles: ["admin", "manager"],
- },
{
title: "Roles",
href: "/roles",
diff --git a/server/database-storage.ts b/server/database-storage.ts
index 9baf933..876bbf5 100644
--- a/server/database-storage.ts
+++ b/server/database-storage.ts
@@ -1,7 +1,6 @@
import {
users, organizations, domains, dnsRecords,
providers, dnsHistory, apiTokens, webhooks, webhookDeliveryLogs, dnsMetrics,
- groups, groupMembers,
type User, type InsertUser,
type Organization, type InsertOrganization,
type Domain, type InsertDomain,
@@ -10,9 +9,7 @@ import {
type ApiToken, type InsertApiToken,
type DnsHistory, type Webhook, type InsertWebhook,
type WebhookDeliveryLog, type InsertWebhookDeliveryLog,
- type DnsMetric, type InsertDnsMetric,
- type Group, type InsertGroup,
- type GroupMember, type InsertGroupMember
+ type DnsMetric, type InsertDnsMetric
} from "@shared/schema";
import { db } from "./db";
import { eq, and, desc, or, inArray, sql } from "drizzle-orm";
@@ -95,49 +92,7 @@ export class DatabaseStorage implements IStorage {
return result.length > 0;
}
- // Group management
- async getGroup(id: string): Promise {
- const [group] = await db.select().from(groups).where(eq(groups.id, id));
- return group;
- }
-
- async getGroups(): Promise {
- return await db.select().from(groups);
- }
-
- async getGroupMembers(groupId: string): Promise {
- return await db.select()
- .from(groupMembers)
- .where(eq(groupMembers.groupId, groupId));
- }
-
- async createGroup(group: InsertGroup): Promise {
- const [newGroup] = await db.insert(groups).values(group).returning();
- return newGroup;
- }
-
- async updateGroup(id: string, groupData: Partial): Promise {
- const [updatedGroup] = await db.update(groups)
- .set(groupData)
- .where(eq(groups.id, id))
- .returning();
- return updatedGroup;
- }
-
- async deleteGroup(id: string): Promise {
- const result = await db.delete(groups).where(eq(groups.id, id)).returning();
- return result.length > 0;
- }
-
- async addGroupMember(member: InsertGroupMember): Promise {
- const [newMember] = await db.insert(groupMembers).values(member).returning();
- return newMember;
- }
-
- async removeGroupMember(id: string): Promise {
- const result = await db.delete(groupMembers).where(eq(groupMembers.id, id)).returning();
- return result.length > 0;
- }
+ // Group management methods have been removed
// Domain management
async getDomain(id: string): Promise {
diff --git a/server/routes.ts b/server/routes.ts
index eef4c06..5695ed2 100644
--- a/server/routes.ts
+++ b/server/routes.ts
@@ -15,8 +15,6 @@ import {
insertWebhookSchema,
insertDnsMetricSchema,
insertCustomRoleSchema,
- insertGroupSchema,
- insertGroupMemberSchema,
recordTypes,
providerTypes,
customRoles,
diff --git a/shared/schema.ts b/shared/schema.ts
index dd42d12..6a7bd37 100644
--- a/shared/schema.ts
+++ b/shared/schema.ts
@@ -143,40 +143,7 @@ export const customRoles = pgTable("custom_roles", {
createdBy: uuid("created_by").notNull().references(() => users.id, { onDelete: "set null" }),
});
-// Groups can contain users, organizations, or other groups
-export const groups = pgTable("groups", {
- id: uuid("id").defaultRandom().primaryKey(),
- name: text("name").notNull(),
- description: text("description"),
- isActive: boolean("is_active").default(true).notNull(),
- createdAt: timestamp("created_at").defaultNow().notNull(),
- createdBy: uuid("created_by").notNull().references(() => users.id, { onDelete: "set null" }),
- parentGroupId: uuid("parent_group_id").references(() => groups.id, { onDelete: "set null" }),
-});
-
-// Group members - can be users, organizations, or other groups
-export const groupMembers = pgTable("group_members", {
- id: uuid("id").defaultRandom().primaryKey(),
- groupId: uuid("group_id").notNull().references(() => groups.id, { onDelete: "cascade" }),
- // Specify the type of member: "user", "organization", or "group"
- memberType: text("member_type").notNull(),
- // ID of the member (user, organization, or group)
- memberId: uuid("member_id").notNull(),
- addedAt: timestamp("added_at").defaultNow().notNull(),
- addedBy: uuid("added_by").notNull().references(() => users.id, { onDelete: "set null" }),
-});
-
-// Group role assignments - associates groups with roles
-export const groupRoles = pgTable("group_roles", {
- id: uuid("id").defaultRandom().primaryKey(),
- groupId: uuid("group_id").notNull().references(() => groups.id, { onDelete: "cascade" }),
- // Can be either a system role (string) or a custom role ID (uuid)
- roleId: text("role_id").notNull(),
- // Indicates if this is a system role or a custom role
- isSystemRole: boolean("is_system_role").notNull(),
- assignedAt: timestamp("assigned_at").defaultNow().notNull(),
- assignedBy: uuid("assigned_by").notNull().references(() => users.id, { onDelete: "set null" }),
-});
+// Note: Groups, GroupMembers, and GroupRoles tables have been removed in this version
// Schema Validation
export const insertUserSchema = createInsertSchema(users).pick({
@@ -252,27 +219,7 @@ export const insertCustomRoleSchema = createInsertSchema(customRoles).pick({
createdBy: true,
});
-export const insertGroupSchema = createInsertSchema(groups).pick({
- name: true,
- description: true,
- isActive: true,
- createdBy: true,
- parentGroupId: true,
-});
-
-export const insertGroupMemberSchema = createInsertSchema(groupMembers).pick({
- groupId: true,
- memberType: true,
- memberId: true,
- addedBy: true,
-});
-
-export const insertGroupRoleSchema = createInsertSchema(groupRoles).pick({
- groupId: true,
- roleId: true,
- isSystemRole: true,
- assignedBy: true,
-});
+// Note: Group-related insert schemas have been removed in this version
export const insertWebhookSchema = createInsertSchema(webhooks).pick({
name: true,
@@ -331,14 +278,9 @@ export type ApiToken = typeof apiTokens.$inferSelect;
export type DnsHistory = typeof dnsHistory.$inferSelect;
export type DnsMetric = typeof dnsMetrics.$inferSelect;
export type CustomRole = typeof customRoles.$inferSelect;
-export type Group = typeof groups.$inferSelect;
-export type GroupMember = typeof groupMembers.$inferSelect;
-export type GroupRole = typeof groupRoles.$inferSelect;
+// Note: Group-related types have been removed in this version
export type InsertCustomRole = z.infer;
-export type InsertGroup = z.infer;
-export type InsertGroupMember = z.infer;
-export type InsertGroupRole = z.infer;
export type InsertWebhook = z.infer;
export type Webhook = typeof webhooks.$inferSelect;
export type InsertWebhookDeliveryLog = z.infer;
@@ -353,8 +295,8 @@ export type SystemRole = typeof systemRoles[number];
// User roles can be system roles or custom roles
export type UserRole = SystemRole | string;
-// Define member types for group members
-export const memberTypes = ['user', 'organization', 'group'] as const;
+// Define member types (group type removed)
+export const memberTypes = ['user', 'organization'] as const;
export type MemberType = typeof memberTypes[number];
// Provider Types
@@ -452,49 +394,11 @@ export const webhookDeliveryLogsRelations = relations(webhookDeliveryLogs, ({ on
// Custom roles relations
-export const customRolesRelations = relations(customRoles, ({ one, many }) => ({
+export const customRolesRelations = relations(customRoles, ({ one }) => ({
creator: one(users, {
fields: [customRoles.createdBy],
references: [users.id],
}),
- groupRoles: many(groupRoles),
}));
-// Group relations
-export const groupsRelations = relations(groups, ({ one, many }) => ({
- creator: one(users, {
- fields: [groups.createdBy],
- references: [users.id],
- }),
- parentGroup: one(groups, {
- fields: [groups.parentGroupId],
- references: [groups.id],
- relationName: "parentGroup",
- }),
- members: many(groupMembers),
- roles: many(groupRoles),
-}));
-
-// Group members relations
-export const groupMembersRelations = relations(groupMembers, ({ one }) => ({
- group: one(groups, {
- fields: [groupMembers.groupId],
- references: [groups.id],
- }),
- addedByUser: one(users, {
- fields: [groupMembers.addedBy],
- references: [users.id],
- }),
-}));
-
-// Group roles relations
-export const groupRolesRelations = relations(groupRoles, ({ one }) => ({
- group: one(groups, {
- fields: [groupRoles.groupId],
- references: [groups.id],
- }),
- assignedByUser: one(users, {
- fields: [groupRoles.assignedBy],
- references: [users.id],
- }),
-}));
+// Note: Group-related relations have been removed in this version