Skip to content

Helps you write Supabase Row Level Security (RLS) in Typescript.

License

Notifications You must be signed in to change notification settings

hmmhmmhm/rls-ts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧶 Supabase RLS in Typescript

Watch the video Actual Image

📜 Helps you write Supabase Row Level Security (RLS) in Typescript. (* plv8)


🚀 Usage

New website opned!!: https://supabase-rls.up.railway.app (Web Source)

1. Clone And Install

git clone https://github.com/hmmhmmhm/rls-ts.git
cd ./rls-ts
npm install

2. Update Project Types

Please read the guide and follow it to read the type of Supabase project. Generating Supabase Types

3. Create or Modify File

Create or modify the example.ts file in the ./src directory.

export default createPolicy<TABLE_NAME>((context) => {
  // TODO: Your policy logic
  return true;
});

Below is an example of use.

export default createPolicy<"channels">((context) => {
  // * Allow only creators to update their own channels
  return context.row.created_by === context.auth.uid();
});

4. Build

After entering the command below, a file is created, such as build/example.plv8.sql.

npm run build

Copying the translated script and pasting it into the desired policy within Supabase takes effect. (Below is an example of sql file.)

-- example.ts.plv8.sql
boolean as $$
function createPolicy(cb) {
    cb({
        row: globalThis,
        function: globalThis,
        auth: globalThis.auth,
        plv8: globalThis.plv8
    });
}
return createPolicy(function(context) {
    // Allow only creators to update their own channels
    if (context.row.created_by === context.auth.uid()) return true;
});
$$ language plv8;

✅ License

MIT Licensed.