Setup todos table permissions
Head over to the Permissions tab under todos
table to add relevant permissions.
Insert permission
We will allow logged-in users creating a new todo entry to only specify the is_public
and title
columns.
- In the enter new role textbox, type in “user”
- Click on edit (pencil) icon for “insert” permissions. This would open up a section below, which lets you configure custom checks and allow columns.
- In the custom check, choose the following condition
{"user_id":{"_eq":"X-Hasura-User-Id"}}
Now under "Column insert permissions", select the title
and is_public
columns.
Finally under "Column presets", select user_id
from from session variable
mapping to X-HASURA-USER-ID
.
Note: Session variables are key-value pairs returned from the authentication service for each request. When a user makes a request, the session token maps to a USER-ID
. This USER-ID
can be used in permission to show that inserts into a table are only allowed if the user_id
column has a value equal to that of USER-ID
, the session variable.
Click on Save Permissions
.
Select permission
We will allow users to view a todo entry if it is public or if they are logged-in users.
Now click on edit icon for "select" permissions. In the custom check, choose the following condition
{"_or":[{"is_public":{"_eq":true}},{"user_id":{"_eq":"X-Hasura-User-Id"}}]}
Under "Column select permissions", select all the columns.
Click on Save Permissions
Update permission
We will only allow the is_completed
column to be updated by a user.
Now click on edit icon for "update" permissions. In the pre-update custom check, choose With same custom checks as insert
.
And under "Column update permissions", select the is_completed
column.
Click on Save Permissions
once done.
Delete permission
Only logged-in users are allowed to delete a todo entry.
Finally for delete permission, under custom check, choose With same custom checks as insert, pre update
.
Click on Save Permissions
and you are done with access control for todos
table.
- Build apps and APIs 10x faster
- Built-in authorization and caching
- 8x more performant than hand-rolled APIs