11\echo Use " CREATE EXTENSION hello-world" to load this file. \quit
2- CREATE SCHEMA IF NOT EXISTS auth;
3-
4- CREATE OR REPLACE FUNCTION auth .uid() RETURNS uuid LANGUAGE sql STABLE AS $EOFCODE$
5- SELECT COALESCE(
6- current_setting(' request.jwt.claim.sub' , true)::uuid,
7- current_setting(' jwt.claims.sub' , true)::uuid
8- );
9- $EOFCODE$;
10-
11- CREATE OR REPLACE FUNCTION auth .role() RETURNS text LANGUAGE sql STABLE AS $EOFCODE$
12- SELECT COALESCE(
13- current_setting(' role' , true),
14- ' anon'
15- );
16- $EOFCODE$;
17-
18- GRANT USAGE ON SCHEMA auth TO PUBLIC;
19-
20- GRANT EXECUTE ON FUNCTION auth .uid () TO PUBLIC;
21-
22- GRANT EXECUTE ON FUNCTION auth .role () TO PUBLIC;
23-
242CREATE SCHEMA IF NOT EXISTS rls_test;
253
26- CREATE TABLE IF NOT EXISTS rls_test .user_profiles (
27- id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
28- email text UNIQUE NOT NULL ,
29- name text NOT NULL ,
30- created_at timestamp with time zone DEFAULT now(),
31- updated_at timestamp with time zone DEFAULT now()
32- );
33-
34- CREATE TABLE IF NOT EXISTS rls_test .products (
4+ CREATE TABLE IF NOT EXISTS rls_test .pets (
355 id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
36- name text NOT NULL ,
37- description text ,
38- price numeric (10 , 2 ) NOT NULL ,
39- owner_id uuid NOT NULL REFERENCES rls_test .user_profiles (id)
6+ user_id uuid NOT NULL REFERENCES auth .users (id)
407 ON DELETE CASCADE ,
8+ name text NOT NULL ,
9+ breed text NOT NULL ,
4110 created_at timestamp with time zone DEFAULT now(),
4211 updated_at timestamp with time zone DEFAULT now()
4312);
4413
45- ALTER TABLE rls_test .user_profiles
46- ENABLE ROW LEVEL SECURITY;
47-
48- ALTER TABLE rls_test .products
14+ ALTER TABLE rls_test .pets
4915 ENABLE ROW LEVEL SECURITY;
5016
5117CREATE POLICY " Users can view own data"
52- ON rls_test .user_profiles
18+ ON rls_test .pets
5319 AS PERMISSIVE
5420 FOR SELECT
5521 TO PUBLIC
5622 USING (
57- auth .uid () = id
23+ auth .uid () = user_id
5824 );
5925
6026CREATE POLICY " Users can update own data"
61- ON rls_test .user_profiles
27+ ON rls_test .pets
6228 AS PERMISSIVE
6329 FOR UPDATE
6430 TO PUBLIC
6531 USING (
66- auth .uid () = id
32+ auth .uid () = user_id
6733 );
6834
6935CREATE POLICY " Users can insert own data"
70- ON rls_test .user_profiles
36+ ON rls_test .pets
7137 AS PERMISSIVE
7238 FOR INSERT
7339 TO PUBLIC
7440 WITH CHECK (
75- true
41+ auth . uid () = user_id
7642 );
7743
7844CREATE POLICY " Users can delete own data"
79- ON rls_test .user_profiles
80- AS PERMISSIVE
81- FOR DELETE
82- TO PUBLIC
83- USING (
84- auth .uid () = id
85- );
86-
87- CREATE POLICY " Users can view own products"
88- ON rls_test .products
89- AS PERMISSIVE
90- FOR SELECT
91- TO PUBLIC
92- USING (
93- auth .uid () = owner_id
94- );
95-
96- CREATE POLICY " Users can insert own products"
97- ON rls_test .products
98- AS PERMISSIVE
99- FOR INSERT
100- TO PUBLIC
101- WITH CHECK (
102- auth .uid () = owner_id
103- );
104-
105- CREATE POLICY " Users can update own products"
106- ON rls_test .products
107- AS PERMISSIVE
108- FOR UPDATE
109- TO PUBLIC
110- USING (
111- auth .uid () = owner_id
112- );
113-
114- CREATE POLICY " Users can delete own products"
115- ON rls_test .products
45+ ON rls_test .pets
11646 AS PERMISSIVE
11747 FOR DELETE
11848 TO PUBLIC
11949 USING (
120- auth .uid () = owner_id
50+ auth .uid () = user_id
12151 );
12252
12353GRANT USAGE ON SCHEMA rls_test TO anon;
12454
125- GRANT ALL ON rls_test .user_profiles TO anon;
55+ GRANT ALL ON rls_test .pets TO anon;
12656
12757GRANT USAGE ON SCHEMA rls_test TO authenticated;
12858
129- GRANT ALL ON rls_test .user_profiles TO authenticated;
130-
131- GRANT ALL ON rls_test .products TO authenticated;
59+ GRANT ALL ON rls_test .pets TO authenticated;
13260
13361GRANT USAGE ON SCHEMA rls_test TO service_role;
13462
135- GRANT ALL ON rls_test .user_profiles TO service_role;
136-
137- GRANT ALL ON rls_test .products TO service_role;
138-
139- CREATE INDEX IF NOT EXISTS idx_products_owner_id ON rls_test .products (owner_id);
63+ GRANT ALL ON rls_test .pets TO service_role;
14064
141- CREATE INDEX IF NOT EXISTS idx_users_email ON rls_test .user_profiles (email );
65+ CREATE INDEX IF NOT EXISTS idx_users_user_id ON rls_test .pets (user_id );
14266
14367CREATE OR REPLACE FUNCTION rls_test .update_updated_at_column() RETURNS trigger AS $EOFCODE$
14468BEGIN
@@ -149,12 +73,6 @@ $EOFCODE$ LANGUAGE plpgsql;
14973
15074CREATE TRIGGER update_users_updated_at
15175 BEFORE UPDATE
152- ON rls_test .user_profiles
153- FOR EACH ROW
154- EXECUTE PROCEDURE rls_test .update_updated_at_column ();
155-
156- CREATE TRIGGER update_products_updated_at
157- BEFORE UPDATE
158- ON rls_test .products
76+ ON rls_test .pets
15977 FOR EACH ROW
16078 EXECUTE PROCEDURE rls_test .update_updated_at_column ();
0 commit comments