mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
feat: add user groups and inherited access policies
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
ALTER TABLE users
|
||||
ADD COLUMN allowed_providers_mode VARCHAR(32) NOT NULL DEFAULT 'unrestricted',
|
||||
ADD COLUMN allowed_api_formats_mode VARCHAR(32) NOT NULL DEFAULT 'unrestricted',
|
||||
ADD COLUMN allowed_models_mode VARCHAR(32) NOT NULL DEFAULT 'unrestricted',
|
||||
ADD COLUMN rate_limit_mode VARCHAR(32) NOT NULL DEFAULT 'system';
|
||||
|
||||
UPDATE users
|
||||
SET allowed_providers_mode = CASE WHEN allowed_providers IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_providers_mode = 'unrestricted';
|
||||
|
||||
UPDATE users
|
||||
SET allowed_api_formats_mode = CASE WHEN allowed_api_formats IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_api_formats_mode = 'unrestricted';
|
||||
|
||||
UPDATE users
|
||||
SET allowed_models_mode = CASE WHEN allowed_models IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_models_mode = 'unrestricted';
|
||||
|
||||
UPDATE users
|
||||
SET rate_limit_mode = CASE WHEN rate_limit IS NULL THEN 'system' ELSE 'custom' END
|
||||
WHERE rate_limit_mode = 'system';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_groups (
|
||||
id VARCHAR(64) PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
normalized_name VARCHAR(100) NOT NULL,
|
||||
description TEXT,
|
||||
priority INT NOT NULL DEFAULT 0,
|
||||
allowed_providers TEXT,
|
||||
allowed_providers_mode VARCHAR(32) NOT NULL DEFAULT 'inherit',
|
||||
allowed_api_formats TEXT,
|
||||
allowed_api_formats_mode VARCHAR(32) NOT NULL DEFAULT 'inherit',
|
||||
allowed_models TEXT,
|
||||
allowed_models_mode VARCHAR(32) NOT NULL DEFAULT 'inherit',
|
||||
rate_limit INT,
|
||||
rate_limit_mode VARCHAR(32) NOT NULL DEFAULT 'inherit',
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY user_groups_normalized_name_key (normalized_name),
|
||||
KEY user_groups_priority_name_idx (priority, name, id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_group_members (
|
||||
group_id VARCHAR(64) NOT NULL,
|
||||
user_id VARCHAR(64) NOT NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
PRIMARY KEY (group_id, user_id),
|
||||
KEY user_group_members_user_id_idx (user_id),
|
||||
CONSTRAINT user_group_members_group_id_fk
|
||||
FOREIGN KEY (group_id) REFERENCES user_groups(id) ON DELETE CASCADE,
|
||||
CONSTRAINT user_group_members_user_id_fk
|
||||
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
||||
);
|
||||
@@ -0,0 +1,60 @@
|
||||
ALTER TABLE public.users
|
||||
ADD COLUMN IF NOT EXISTS allowed_providers_mode text DEFAULT 'unrestricted' NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS allowed_api_formats_mode text DEFAULT 'unrestricted' NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS allowed_models_mode text DEFAULT 'unrestricted' NOT NULL,
|
||||
ADD COLUMN IF NOT EXISTS rate_limit_mode text DEFAULT 'system' NOT NULL;
|
||||
|
||||
UPDATE public.users
|
||||
SET allowed_providers_mode = CASE WHEN allowed_providers IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_providers_mode = 'unrestricted';
|
||||
|
||||
UPDATE public.users
|
||||
SET allowed_api_formats_mode = CASE WHEN allowed_api_formats IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_api_formats_mode = 'unrestricted';
|
||||
|
||||
UPDATE public.users
|
||||
SET allowed_models_mode = CASE WHEN allowed_models IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_models_mode = 'unrestricted';
|
||||
|
||||
UPDATE public.users
|
||||
SET rate_limit_mode = CASE WHEN rate_limit IS NULL THEN 'system' ELSE 'custom' END
|
||||
WHERE rate_limit_mode = 'system';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.user_groups (
|
||||
id character varying(36) PRIMARY KEY,
|
||||
name character varying(100) NOT NULL,
|
||||
normalized_name character varying(100) NOT NULL UNIQUE,
|
||||
description text,
|
||||
priority integer DEFAULT 0 NOT NULL,
|
||||
allowed_providers json,
|
||||
allowed_providers_mode text DEFAULT 'inherit' NOT NULL,
|
||||
allowed_api_formats json,
|
||||
allowed_api_formats_mode text DEFAULT 'inherit' NOT NULL,
|
||||
allowed_models json,
|
||||
allowed_models_mode text DEFAULT 'inherit' NOT NULL,
|
||||
rate_limit integer,
|
||||
rate_limit_mode text DEFAULT 'inherit' NOT NULL,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
updated_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
CONSTRAINT user_groups_allowed_providers_mode_check
|
||||
CHECK (allowed_providers_mode IN ('inherit', 'unrestricted', 'specific', 'deny_all')),
|
||||
CONSTRAINT user_groups_allowed_api_formats_mode_check
|
||||
CHECK (allowed_api_formats_mode IN ('inherit', 'unrestricted', 'specific', 'deny_all')),
|
||||
CONSTRAINT user_groups_allowed_models_mode_check
|
||||
CHECK (allowed_models_mode IN ('inherit', 'unrestricted', 'specific', 'deny_all')),
|
||||
CONSTRAINT user_groups_rate_limit_mode_check
|
||||
CHECK (rate_limit_mode IN ('inherit', 'system', 'custom'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.user_group_members (
|
||||
group_id character varying(36) NOT NULL REFERENCES public.user_groups(id) ON DELETE CASCADE,
|
||||
user_id character varying(36) NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
|
||||
created_at timestamp with time zone DEFAULT now() NOT NULL,
|
||||
PRIMARY KEY (group_id, user_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS user_group_members_user_id_idx
|
||||
ON public.user_group_members (user_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS user_groups_priority_name_idx
|
||||
ON public.user_groups (priority DESC, name ASC, id ASC);
|
||||
@@ -0,0 +1,51 @@
|
||||
ALTER TABLE users ADD COLUMN allowed_providers_mode TEXT NOT NULL DEFAULT 'unrestricted';
|
||||
ALTER TABLE users ADD COLUMN allowed_api_formats_mode TEXT NOT NULL DEFAULT 'unrestricted';
|
||||
ALTER TABLE users ADD COLUMN allowed_models_mode TEXT NOT NULL DEFAULT 'unrestricted';
|
||||
ALTER TABLE users ADD COLUMN rate_limit_mode TEXT NOT NULL DEFAULT 'system';
|
||||
|
||||
UPDATE users
|
||||
SET allowed_providers_mode = CASE WHEN allowed_providers IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_providers_mode = 'unrestricted';
|
||||
|
||||
UPDATE users
|
||||
SET allowed_api_formats_mode = CASE WHEN allowed_api_formats IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_api_formats_mode = 'unrestricted';
|
||||
|
||||
UPDATE users
|
||||
SET allowed_models_mode = CASE WHEN allowed_models IS NULL THEN 'unrestricted' ELSE 'specific' END
|
||||
WHERE allowed_models_mode = 'unrestricted';
|
||||
|
||||
UPDATE users
|
||||
SET rate_limit_mode = CASE WHEN rate_limit IS NULL THEN 'system' ELSE 'custom' END
|
||||
WHERE rate_limit_mode = 'system';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_groups (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
normalized_name TEXT NOT NULL UNIQUE,
|
||||
description TEXT,
|
||||
priority INTEGER NOT NULL DEFAULT 0,
|
||||
allowed_providers TEXT,
|
||||
allowed_providers_mode TEXT NOT NULL DEFAULT 'inherit',
|
||||
allowed_api_formats TEXT,
|
||||
allowed_api_formats_mode TEXT NOT NULL DEFAULT 'inherit',
|
||||
allowed_models TEXT,
|
||||
allowed_models_mode TEXT NOT NULL DEFAULT 'inherit',
|
||||
rate_limit INTEGER,
|
||||
rate_limit_mode TEXT NOT NULL DEFAULT 'inherit',
|
||||
created_at INTEGER NOT NULL,
|
||||
updated_at INTEGER NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_group_members (
|
||||
group_id TEXT NOT NULL REFERENCES user_groups(id) ON DELETE CASCADE,
|
||||
user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
created_at INTEGER NOT NULL,
|
||||
PRIMARY KEY (group_id, user_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS user_group_members_user_id_idx
|
||||
ON user_group_members (user_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS user_groups_priority_name_idx
|
||||
ON user_groups (priority DESC, name ASC, id ASC);
|
||||
Reference in New Issue
Block a user