- Introduced a new `PrivilegesModule` to manage user privileges and access control. - Added `RequirePrivilege` decorator to enforce privilege checks on controller handlers. - Implemented `PrivilegesGuard` to handle authorization based on user privileges. - Created database migrations for `privileges`, `privilege_keys`, and `privilege_details` tables. - Updated user model to include `is_superadmin` field for enhanced access control. - Added unit tests for the new privileges functionality and guards to ensure correct behavior.
40 lines
2.6 KiB
SQL
40 lines
2.6 KiB
SQL
CREATE TABLE "privilege_details" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"privilege_id" uuid NOT NULL,
|
|
"privilege_key_id" uuid NOT NULL,
|
|
"action" text NOT NULL,
|
|
"value" boolean NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "privilege_keys" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"code" text NOT NULL,
|
|
"label" text NOT NULL,
|
|
"sort_order" integer NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE TABLE "privileges" (
|
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
|
|
"name" text NOT NULL,
|
|
"code" text NOT NULL,
|
|
"status" text DEFAULT 'draft' NOT NULL,
|
|
"created_at" bigint NOT NULL,
|
|
"updated_at" bigint NOT NULL,
|
|
"created_by" uuid NOT NULL,
|
|
"updated_by" uuid NOT NULL
|
|
);
|
|
--> statement-breakpoint
|
|
ALTER TABLE "users" ADD COLUMN "privilege_id" uuid;--> statement-breakpoint
|
|
ALTER TABLE "privilege_details" ADD CONSTRAINT "privilege_details_privilege_id_privileges_id_fk" FOREIGN KEY ("privilege_id") REFERENCES "public"."privileges"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "privilege_details" ADD CONSTRAINT "privilege_details_privilege_key_id_privilege_keys_id_fk" FOREIGN KEY ("privilege_key_id") REFERENCES "public"."privilege_keys"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "privileges" ADD CONSTRAINT "privileges_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
ALTER TABLE "privileges" ADD CONSTRAINT "privileges_updated_by_users_id_fk" FOREIGN KEY ("updated_by") REFERENCES "public"."users"("id") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "privilege_details_privilege_key_action_unique" ON "privilege_details" USING btree ("privilege_id","privilege_key_id","action");--> statement-breakpoint
|
|
CREATE INDEX "privilege_details_privilege_id_idx" ON "privilege_details" USING btree ("privilege_id");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "privilege_keys_code_unique" ON "privilege_keys" USING btree ("code");--> statement-breakpoint
|
|
CREATE UNIQUE INDEX "privileges_code_unique" ON "privileges" USING btree ("code");--> statement-breakpoint
|
|
CREATE INDEX "users_privilege_id_idx" ON "users" USING btree ("privilege_id");--> statement-breakpoint
|
|
ALTER TABLE "users" ADD CONSTRAINT "users_privilege_id_privileges_id_fk" FOREIGN KEY ("privilege_id") REFERENCES "public"."privileges"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
|
|
INSERT INTO "privilege_keys" ("code", "label", "sort_order") VALUES
|
|
('PRIVILEGES', 'Privileges', 1),
|
|
('USERS', 'Users', 2); |