mirror of https://github.com/buster-so/buster.git
feat: Add DatasetGroupPermission model and schema
- Introduced a new `DatasetGroupPermission` struct in `models.rs` to represent permissions associated with dataset groups. - Updated the database schema in `schema.rs` to include the `dataset_groups_permissions` table, defining its structure and relationships. - Modified the `is_user_workspace_admin_or_data_admin` function in `checks.rs` to correctly reference the user's organization role, enhancing role validation logic.
This commit is contained in:
parent
c4c7b75306
commit
b9b5146299
|
@ -0,0 +1,6 @@
|
||||||
|
-- This file should undo anything in `up.sql`
|
||||||
|
DROP TRIGGER IF EXISTS update_dataset_groups_permissions_updated_at ON dataset_groups_permissions;
|
||||||
|
DROP INDEX IF EXISTS dataset_groups_permissions_organization_id_idx;
|
||||||
|
DROP INDEX IF EXISTS dataset_groups_permissions_permission_id_idx;
|
||||||
|
DROP INDEX IF EXISTS dataset_groups_permissions_dataset_group_id_idx;
|
||||||
|
DROP TABLE IF EXISTS dataset_groups_permissions;
|
|
@ -0,0 +1,15 @@
|
||||||
|
-- Your SQL goes here
|
||||||
|
CREATE TABLE dataset_groups_permissions (
|
||||||
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
|
dataset_group_id UUID NOT NULL REFERENCES dataset_groups(id),
|
||||||
|
permission_id UUID NOT NULL,
|
||||||
|
permission_type VARCHAR NOT NULL,
|
||||||
|
organization_id UUID NOT NULL REFERENCES organizations(id),
|
||||||
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
||||||
|
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
||||||
|
deleted_at TIMESTAMP WITH TIME ZONE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE INDEX dataset_groups_permissions_dataset_group_id_idx ON dataset_groups_permissions(dataset_group_id);
|
||||||
|
CREATE INDEX dataset_groups_permissions_permission_id_idx ON dataset_groups_permissions(permission_id);
|
||||||
|
CREATE INDEX dataset_groups_permissions_organization_id_idx ON dataset_groups_permissions(organization_id);
|
|
@ -523,3 +523,15 @@ pub struct DatasetPermission {
|
||||||
pub updated_at: DateTime<Utc>,
|
pub updated_at: DateTime<Utc>,
|
||||||
pub deleted_at: Option<DateTime<Utc>>,
|
pub deleted_at: Option<DateTime<Utc>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Queryable, Insertable, Debug)]
|
||||||
|
#[diesel(table_name = dataset_groups_permissions)]
|
||||||
|
pub struct DatasetGroupPermission {
|
||||||
|
pub id: Uuid,
|
||||||
|
pub dataset_group_id: Uuid,
|
||||||
|
pub permission_id: Uuid,
|
||||||
|
pub permission_type: String,
|
||||||
|
pub created_at: DateTime<Utc>,
|
||||||
|
pub updated_at: DateTime<Utc>,
|
||||||
|
pub deleted_at: Option<DateTime<Utc>>,
|
||||||
|
}
|
||||||
|
|
|
@ -201,6 +201,19 @@ diesel::table! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
diesel::table! {
|
||||||
|
dataset_groups_permissions (id) {
|
||||||
|
id -> Uuid,
|
||||||
|
dataset_group_id -> Uuid,
|
||||||
|
permission_id -> Uuid,
|
||||||
|
permission_type -> Varchar,
|
||||||
|
organization_id -> Uuid,
|
||||||
|
created_at -> Timestamptz,
|
||||||
|
updated_at -> Timestamptz,
|
||||||
|
deleted_at -> Nullable<Timestamptz>,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
diesel::table! {
|
diesel::table! {
|
||||||
dataset_permissions (id) {
|
dataset_permissions (id) {
|
||||||
id -> Uuid,
|
id -> Uuid,
|
||||||
|
@ -506,6 +519,8 @@ diesel::joinable!(dashboard_versions -> dashboards (dashboard_id));
|
||||||
diesel::joinable!(dashboards -> organizations (organization_id));
|
diesel::joinable!(dashboards -> organizations (organization_id));
|
||||||
diesel::joinable!(data_sources -> organizations (organization_id));
|
diesel::joinable!(data_sources -> organizations (organization_id));
|
||||||
diesel::joinable!(dataset_groups -> organizations (organization_id));
|
diesel::joinable!(dataset_groups -> organizations (organization_id));
|
||||||
|
diesel::joinable!(dataset_groups_permissions -> dataset_groups (dataset_group_id));
|
||||||
|
diesel::joinable!(dataset_groups_permissions -> organizations (organization_id));
|
||||||
diesel::joinable!(dataset_permissions -> datasets (dataset_id));
|
diesel::joinable!(dataset_permissions -> datasets (dataset_id));
|
||||||
diesel::joinable!(dataset_permissions -> organizations (organization_id));
|
diesel::joinable!(dataset_permissions -> organizations (organization_id));
|
||||||
diesel::joinable!(datasets -> data_sources (data_source_id));
|
diesel::joinable!(datasets -> data_sources (data_source_id));
|
||||||
|
@ -544,6 +559,7 @@ diesel::allow_tables_to_appear_in_same_query!(
|
||||||
data_sources,
|
data_sources,
|
||||||
dataset_columns,
|
dataset_columns,
|
||||||
dataset_groups,
|
dataset_groups,
|
||||||
|
dataset_groups_permissions,
|
||||||
dataset_permissions,
|
dataset_permissions,
|
||||||
datasets,
|
datasets,
|
||||||
datasets_to_dataset_groups,
|
datasets_to_dataset_groups,
|
||||||
|
|
|
@ -25,7 +25,7 @@ pub async fn is_user_workspace_admin_or_data_admin(
|
||||||
None => return Err(anyhow::anyhow!("User organization id not found")),
|
None => return Err(anyhow::anyhow!("User organization id not found")),
|
||||||
};
|
};
|
||||||
|
|
||||||
let user_role = match user.attributes.get("role") {
|
let user_role = match user.attributes.get("organization_role") {
|
||||||
Some(Value::String(role)) => role,
|
Some(Value::String(role)) => role,
|
||||||
Some(_) => return Err(anyhow::anyhow!("User role not found")),
|
Some(_) => return Err(anyhow::anyhow!("User role not found")),
|
||||||
None => return Err(anyhow::anyhow!("User role not found")),
|
None => return Err(anyhow::anyhow!("User role not found")),
|
||||||
|
|
Loading…
Reference in New Issue