Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT]: Configure Role-Based Permissions for Tables #90

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ services:
HASURA_GRAPHQL_DEV_MODE: "true"
HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
HASURA_GRAPHQL_METADATA_DEFAULTS: '{"backend_configs":{"dataconnector":{"athena":{"uri":"http://data-connector-agent:8081/api/v1/athena"},"mariadb":{"uri":"http://data-connector-agent:8081/api/v1/mariadb"},"mysql8":{"uri":"http://data-connector-agent:8081/api/v1/mysql"},"oracle":{"uri":"http://data-connector-agent:8081/api/v1/oracle"},"snowflake":{"uri":"http://data-connector-agent:8081/api/v1/snowflake"}}}}'
HASURA_GRAPHQL_JWT_SECRET: '{"type":"RS256","jwk_url":"https://www.googleapis.com/service_accounts/v1/jwk/[email protected]","claims_map":{"x-hasura-allowed-roles":{"path":"$.roles"},"x-hasura-default-role":{"path":"$.role"},"x-hasura-user-id":{"path":"$.user_id"}}}'
depends_on:
postgres:
condition: service_healthy
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
table:
name: apartment_contracts
schema: public

object_relationships:
- name: apartment
using:
foreign_key_constraint_on: apartment_id

select_permissions:
- role: anonymous
permission:
columns: []
filter: {}
comment: ""
- role: tenant
permission:
columns:
- id
- apartment_id
- tenant_id
- start_date
- end_date
- status
- rent_amount
- security_deposit
- terms_conditions
- created_at
- updated_at
filter:
tenant_id:
_eq: X-Hasura-User-Id
comment: "Tenants can view their own contracts"
- role: landlord
permission:
columns:
- id
- apartment_id
- tenant_id
- start_date
- end_date
- status
- rent_amount
- security_deposit
- terms_conditions
- created_at
- updated_at
filter:
apartment:
owner_id:
_eq: X-Hasura-User-Id
comment: "Landlords can view contracts for their properties"

update_permissions:
- role: landlord
permission:
columns:
- status
- terms_conditions
filter:
apartment:
owner_id:
_eq: X-Hasura-User-Id
status:
_in: ["DRAFT", "PENDING"]
check:
apartment:
owner_id:
_eq: X-Hasura-User-Id
comment: "Landlords can update contract status and terms for their properties"
53 changes: 53 additions & 0 deletions metadata/databases/safetrust/tables/public_apartment_images.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,56 @@
table:
name: apartment_images
schema: public

object_relationships:
- name: apartment
using:
foreign_key_constraint_on: apartment_id

select_permissions:
- role: anonymous
permission:
columns: []
filter: {}
comment: ""
- role: tenant
permission:
columns:
- id
- apartment_id
- image_url
- uploaded_at
filter:
apartment:
is_available:
_eq: true
deleted_at:
_is_null: true
comment: "Tenants can view images of available apartments"
- role: landlord
permission:
columns:
- id
- apartment_id
- image_url
- uploaded_at
filter:
apartment:
owner_id:
_eq: X-Hasura-User-Id
comment: "Landlords can view images of their own apartments"

update_permissions:
- role: landlord
permission:
columns:
- image_url
filter:
apartment:
owner_id:
_eq: X-Hasura-User-Id
check:
apartment:
owner_id:
_eq: X-Hasura-User-Id
comment: "Landlords can update images of their own apartments"
99 changes: 99 additions & 0 deletions metadata/databases/safetrust/tables/public_apartments.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
table:
name: apartments
schema: public

array_relationships:
- name: apartment_images
using:
foreign_key_constraint_on:
column: apartment_id
table:
name: apartment_images
schema: public
- name: bid_requests
using:
foreign_key_constraint_on:
column: apartment_id
table:
name: bid_requests
schema: public
- name: apartment_contracts
using:
foreign_key_constraint_on:
column: apartment_id
table:
name: apartment_contracts
schema: public

select_permissions:
- role: anonymous
permission:
columns: []
filter: {}
comment: ""
- role: tenant
permission:
columns:
- id
- owner_id
- name
- description
- price
- warranty_deposit
- coordinates
- location_area
- address
- is_available
- available_from
- available_until
- created_at
filter:
is_available:
_eq: true
deleted_at:
_is_null: true
comment: "Tenants can view all available apartments"
- role: landlord
permission:
columns:
- id
- owner_id
- name
- description
- price
- warranty_deposit
- coordinates
- location_area
- address
- is_available
- available_from
- available_until
- created_at
- updated_at
- deleted_at
filter:
owner_id:
_eq: X-Hasura-User-Id
comment: "Landlords can view their own apartments"

update_permissions:
- role: landlord
permission:
columns:
- name
- description
- price
- warranty_deposit
- coordinates
- location_area
- address
- is_available
- available_from
- available_until
filter:
owner_id:
_eq: X-Hasura-User-Id
check:
owner_id:
_eq: X-Hasura-User-Id
comment: "Landlords can update their own apartments"
108 changes: 108 additions & 0 deletions metadata/databases/safetrust/tables/public_bid_requests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
table:
name: bid_requests
schema: public

object_relationships:
- name: apartment
using:
foreign_key_constraint_on: apartment_id
- name: tenant
using:
foreign_key_constraint_on: tenant_id

array_relationships:
- name: bid_status_histories
using:
foreign_key_constraint_on:
column: bid_request_id
table:
name: bid_status_histories
schema: public

select_permissions:
- role: anonymous
permission:
columns: []
filter: {}
comment: ""
- role: tenant
permission:
columns:
- id
- apartment_id
- tenant_id
- current_status
- proposed_price
- desired_move_in
- created_at
- updated_at
filter:
tenant_id:
_eq: X-Hasura-User-Id
deleted_at:
_is_null: true
comment: "Tenants can view their own bid requests"
- role: landlord
permission:
columns:
- id
- apartment_id
- tenant_id
- current_status
- proposed_price
- desired_move_in
- created_at
- updated_at
filter:
apartment:
owner_id:
_eq: X-Hasura-User-Id
deleted_at:
_is_null: true
comment: "Landlords can view bid requests for their apartments"

update_permissions:
- role: tenant
permission:
columns:
- proposed_price
- desired_move_in
filter:
_and:
- tenant_id:
_eq: X-Hasura-User-Id
- current_status:
_in: ["DRAFT", "PENDING"]
- deleted_at:
_is_null: true
check:
tenant_id:
_eq: X-Hasura-User-Id
comment: "Tenants can update their own pending bid requests"
- role: landlord
permission:
columns:
- current_status
filter:
apartment:
owner_id:
_eq: X-Hasura-User-Id
deleted_at:
_is_null: true
check: {}
comment: "Landlords can update status of bid requests for their apartments"

insert_permissions:
- role: tenant
permission:
check:
tenant_id:
_eq: X-Hasura-User-Id
columns:
- apartment_id
- proposed_price
- desired_move_in
set:
tenant_id: X-Hasura-User-Id
current_status: "DRAFT"
comment: "Tenants can create new bid requests"
Loading