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
This commit is contained in:
alphaeusmote
2025-04-11 16:02:40 +00:00
parent cc85af391d
commit 2807032e57
5 changed files with 15 additions and 164 deletions
@@ -65,16 +65,16 @@ export function MobileSidebar({ isOpen, onClose }: MobileSidebarProps) {
// Define admin navigation items // Define admin navigation items
const adminNavItems = [ const adminNavItems = [
{ {
title: "Users & Roles", title: "Users",
href: "/users-roles", href: "/users-roles",
icon: <Users className="w-5 h-5 mr-3" />, icon: <Users className="w-5 h-5 mr-3" />,
roles: ["admin"], roles: ["admin"],
}, },
{ {
title: "Groups", title: "Roles",
href: "/groups", href: "/roles",
icon: <Users className="w-5 h-5 mr-3" />, icon: <Key className="w-5 h-5 mr-3" />,
roles: ["admin", "manager"], roles: ["admin"],
}, },
{ {
title: "Webhooks", title: "Webhooks",
+1 -7
View File
@@ -62,17 +62,11 @@ export function Sidebar() {
// Define admin navigation items // Define admin navigation items
const adminNavItems = [ const adminNavItems = [
{ {
title: "Users & Roles", title: "Users",
href: "/users-roles", href: "/users-roles",
icon: <Users className="w-5 h-5 mr-3" />, icon: <Users className="w-5 h-5 mr-3" />,
roles: ["admin"], roles: ["admin"],
}, },
{
title: "Groups",
href: "/groups",
icon: <UsersRound className="w-5 h-5 mr-3" />,
roles: ["admin", "manager"],
},
{ {
title: "Roles", title: "Roles",
href: "/roles", href: "/roles",
+2 -47
View File
@@ -1,7 +1,6 @@
import { import {
users, organizations, domains, dnsRecords, users, organizations, domains, dnsRecords,
providers, dnsHistory, apiTokens, webhooks, webhookDeliveryLogs, dnsMetrics, providers, dnsHistory, apiTokens, webhooks, webhookDeliveryLogs, dnsMetrics,
groups, groupMembers,
type User, type InsertUser, type User, type InsertUser,
type Organization, type InsertOrganization, type Organization, type InsertOrganization,
type Domain, type InsertDomain, type Domain, type InsertDomain,
@@ -10,9 +9,7 @@ import {
type ApiToken, type InsertApiToken, type ApiToken, type InsertApiToken,
type DnsHistory, type Webhook, type InsertWebhook, type DnsHistory, type Webhook, type InsertWebhook,
type WebhookDeliveryLog, type InsertWebhookDeliveryLog, type WebhookDeliveryLog, type InsertWebhookDeliveryLog,
type DnsMetric, type InsertDnsMetric, type DnsMetric, type InsertDnsMetric
type Group, type InsertGroup,
type GroupMember, type InsertGroupMember
} from "@shared/schema"; } from "@shared/schema";
import { db } from "./db"; import { db } from "./db";
import { eq, and, desc, or, inArray, sql } from "drizzle-orm"; import { eq, and, desc, or, inArray, sql } from "drizzle-orm";
@@ -95,49 +92,7 @@ export class DatabaseStorage implements IStorage {
return result.length > 0; return result.length > 0;
} }
// Group management // Group management methods have been removed
async getGroup(id: string): Promise<Group | undefined> {
const [group] = await db.select().from(groups).where(eq(groups.id, id));
return group;
}
async getGroups(): Promise<Group[]> {
return await db.select().from(groups);
}
async getGroupMembers(groupId: string): Promise<GroupMember[]> {
return await db.select()
.from(groupMembers)
.where(eq(groupMembers.groupId, groupId));
}
async createGroup(group: InsertGroup): Promise<Group> {
const [newGroup] = await db.insert(groups).values(group).returning();
return newGroup;
}
async updateGroup(id: string, groupData: Partial<InsertGroup>): Promise<Group | undefined> {
const [updatedGroup] = await db.update(groups)
.set(groupData)
.where(eq(groups.id, id))
.returning();
return updatedGroup;
}
async deleteGroup(id: string): Promise<boolean> {
const result = await db.delete(groups).where(eq(groups.id, id)).returning();
return result.length > 0;
}
async addGroupMember(member: InsertGroupMember): Promise<GroupMember> {
const [newMember] = await db.insert(groupMembers).values(member).returning();
return newMember;
}
async removeGroupMember(id: string): Promise<boolean> {
const result = await db.delete(groupMembers).where(eq(groupMembers.id, id)).returning();
return result.length > 0;
}
// Domain management // Domain management
async getDomain(id: string): Promise<Domain | undefined> { async getDomain(id: string): Promise<Domain | undefined> {
-2
View File
@@ -15,8 +15,6 @@ import {
insertWebhookSchema, insertWebhookSchema,
insertDnsMetricSchema, insertDnsMetricSchema,
insertCustomRoleSchema, insertCustomRoleSchema,
insertGroupSchema,
insertGroupMemberSchema,
recordTypes, recordTypes,
providerTypes, providerTypes,
customRoles, customRoles,
+7 -103
View File
@@ -143,40 +143,7 @@ export const customRoles = pgTable("custom_roles", {
createdBy: uuid("created_by").notNull().references(() => users.id, { onDelete: "set null" }), createdBy: uuid("created_by").notNull().references(() => users.id, { onDelete: "set null" }),
}); });
// Groups can contain users, organizations, or other groups // Note: Groups, GroupMembers, and GroupRoles tables have been removed in this version
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" }),
});
// Schema Validation // Schema Validation
export const insertUserSchema = createInsertSchema(users).pick({ export const insertUserSchema = createInsertSchema(users).pick({
@@ -252,27 +219,7 @@ export const insertCustomRoleSchema = createInsertSchema(customRoles).pick({
createdBy: true, createdBy: true,
}); });
export const insertGroupSchema = createInsertSchema(groups).pick({ // Note: Group-related insert schemas have been removed in this version
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,
});
export const insertWebhookSchema = createInsertSchema(webhooks).pick({ export const insertWebhookSchema = createInsertSchema(webhooks).pick({
name: true, name: true,
@@ -331,14 +278,9 @@ export type ApiToken = typeof apiTokens.$inferSelect;
export type DnsHistory = typeof dnsHistory.$inferSelect; export type DnsHistory = typeof dnsHistory.$inferSelect;
export type DnsMetric = typeof dnsMetrics.$inferSelect; export type DnsMetric = typeof dnsMetrics.$inferSelect;
export type CustomRole = typeof customRoles.$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<typeof insertCustomRoleSchema>; export type InsertCustomRole = z.infer<typeof insertCustomRoleSchema>;
export type InsertGroup = z.infer<typeof insertGroupSchema>;
export type InsertGroupMember = z.infer<typeof insertGroupMemberSchema>;
export type InsertGroupRole = z.infer<typeof insertGroupRoleSchema>;
export type InsertWebhook = z.infer<typeof insertWebhookSchema>; export type InsertWebhook = z.infer<typeof insertWebhookSchema>;
export type Webhook = typeof webhooks.$inferSelect; export type Webhook = typeof webhooks.$inferSelect;
export type InsertWebhookDeliveryLog = z.infer<typeof insertWebhookDeliveryLogSchema>; export type InsertWebhookDeliveryLog = z.infer<typeof insertWebhookDeliveryLogSchema>;
@@ -353,8 +295,8 @@ export type SystemRole = typeof systemRoles[number];
// User roles can be system roles or custom roles // User roles can be system roles or custom roles
export type UserRole = SystemRole | string; export type UserRole = SystemRole | string;
// Define member types for group members // Define member types (group type removed)
export const memberTypes = ['user', 'organization', 'group'] as const; export const memberTypes = ['user', 'organization'] as const;
export type MemberType = typeof memberTypes[number]; export type MemberType = typeof memberTypes[number];
// Provider Types // Provider Types
@@ -452,49 +394,11 @@ export const webhookDeliveryLogsRelations = relations(webhookDeliveryLogs, ({ on
// Custom roles relations // Custom roles relations
export const customRolesRelations = relations(customRoles, ({ one, many }) => ({ export const customRolesRelations = relations(customRoles, ({ one }) => ({
creator: one(users, { creator: one(users, {
fields: [customRoles.createdBy], fields: [customRoles.createdBy],
references: [users.id], references: [users.id],
}), }),
groupRoles: many(groupRoles),
})); }));
// Group relations // Note: Group-related relations have been removed in this version
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],
}),
}));