mirror of https://github.com/buster-so/buster.git
Add UserOrganizationStatus enum and update role checks
- Introduced a new UserOrganizationStatus enum to manage user organization statuses (Active, Inactive, Pending, Guest) in the database schema. - Updated the UserToOrganization model to include a status field. - Refactored role checks across various routes to replace the previous UserOrganizationRole values (Owner, Admin) with new roles (WorkspaceAdmin, DataAdmin) for better role management. - Enhanced data source handling in multiple routes to align with the updated role structure. These changes improve the clarity and functionality of user organization management within the application.
This commit is contained in:
parent
dcfaa43e9e
commit
371b507acd
|
@ -101,6 +101,50 @@ impl AssetPermissionRole {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Serialize,
|
||||
Deserialize,
|
||||
Debug,
|
||||
Clone,
|
||||
Copy,
|
||||
PartialEq,
|
||||
Eq,
|
||||
diesel::AsExpression,
|
||||
diesel::FromSqlRow,
|
||||
)]
|
||||
#[diesel(sql_type = sql_types::UserOrganizationStatusEnum)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub enum UserOrganizationStatus {
|
||||
Active,
|
||||
Inactive,
|
||||
Pending,
|
||||
Guest,
|
||||
}
|
||||
|
||||
impl ToSql<sql_types::UserOrganizationStatusEnum, Pg> for UserOrganizationStatus {
|
||||
fn to_sql<'b>(&'b self, out: &mut Output<'b, '_, Pg>) -> serialize::Result {
|
||||
match *self {
|
||||
UserOrganizationStatus::Active => out.write_all(b"active")?,
|
||||
UserOrganizationStatus::Inactive => out.write_all(b"inactive")?,
|
||||
UserOrganizationStatus::Pending => out.write_all(b"pending")?,
|
||||
UserOrganizationStatus::Guest => out.write_all(b"guest")?,
|
||||
}
|
||||
Ok(IsNull::No)
|
||||
}
|
||||
}
|
||||
|
||||
impl FromSql<sql_types::UserOrganizationStatusEnum, Pg> for UserOrganizationStatus {
|
||||
fn from_sql(bytes: PgValue<'_>) -> deserialize::Result<Self> {
|
||||
match bytes.as_bytes() {
|
||||
b"active" => Ok(UserOrganizationStatus::Active),
|
||||
b"inactive" => Ok(UserOrganizationStatus::Inactive),
|
||||
b"pending" => Ok(UserOrganizationStatus::Pending),
|
||||
b"guest" => Ok(UserOrganizationStatus::Guest),
|
||||
_ => Err("Unrecognized enum variant".into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(
|
||||
Serialize,
|
||||
Deserialize,
|
||||
|
|
|
@ -443,6 +443,7 @@ pub struct UserToOrganization {
|
|||
pub created_by: Uuid,
|
||||
pub updated_by: Uuid,
|
||||
pub deleted_by: Option<Uuid>,
|
||||
pub status: UserOrganizationStatus,
|
||||
}
|
||||
|
||||
#[derive(Queryable, Insertable, Associations, Debug)]
|
||||
|
|
|
@ -359,8 +359,8 @@ async fn is_organization_admin_or_owner(
|
|||
}
|
||||
};
|
||||
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::Admin
|
||||
|| is_organization_admin == UserOrganizationRole::Owner
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::WorkspaceAdmin
|
||||
|| is_organization_admin == UserOrganizationRole::DataAdmin
|
||||
{
|
||||
true
|
||||
} else {
|
||||
|
|
|
@ -72,8 +72,8 @@ async fn post_data_sources_handler(
|
|||
.filter(users_to_organizations::deleted_at.is_null())
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Owner)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Admin)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.filter(users_to_organizations::user_id.eq(user_id))
|
||||
.first::<Uuid>(&mut conn)
|
||||
|
|
|
@ -85,8 +85,8 @@ pub async fn get_data_source_state(user_id: &Uuid, id: Uuid) -> Result<DataSourc
|
|||
.filter(users_to_organizations::user_id.eq(user_id))
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Admin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Owner)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.filter(users_to_organizations::deleted_at.is_null())
|
||||
.filter(data_sources::deleted_at.is_null())
|
||||
|
|
|
@ -93,8 +93,8 @@ async fn delete_data_source_handler(user_id: &Uuid, id: Uuid) -> Result<()> {
|
|||
.filter(data_sources::deleted_at.is_null())
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Owner)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Admin)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.filter(users_to_organizations::user_id.eq(user_id))
|
||||
.first::<Uuid>(&mut conn)
|
||||
|
|
|
@ -108,8 +108,8 @@ async fn list_data_sources_handler(
|
|||
.filter(users_to_organizations::user_id.eq(user_id))
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Admin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Owner)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.filter(users_to_organizations::deleted_at.is_null())
|
||||
.filter(data_sources::deleted_at.is_null())
|
||||
|
|
|
@ -119,8 +119,8 @@ async fn post_data_source_handler(
|
|||
.filter(users_to_organizations::deleted_at.is_null())
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Owner)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Admin)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.filter(users_to_organizations::user_id.eq(user_id))
|
||||
.first::<Uuid>(&mut conn)
|
||||
|
|
|
@ -128,8 +128,8 @@ async fn update_data_source_handler(
|
|||
.filter(data_sources::deleted_at.is_null())
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Owner)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Admin)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.filter(users_to_organizations::user_id.eq(user_id))
|
||||
.first::<Uuid>(&mut conn)
|
||||
|
|
|
@ -393,8 +393,8 @@ pub async fn is_organization_admin_or_owner(
|
|||
}
|
||||
};
|
||||
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::Admin
|
||||
|| is_organization_admin == UserOrganizationRole::Owner
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::WorkspaceAdmin
|
||||
|| is_organization_admin == UserOrganizationRole::DataAdmin
|
||||
{
|
||||
true
|
||||
} else {
|
||||
|
|
|
@ -7,7 +7,7 @@ use uuid::Uuid;
|
|||
|
||||
use crate::{
|
||||
database::{
|
||||
enums::{SharingSetting, UserOrganizationRole},
|
||||
enums::{SharingSetting, UserOrganizationRole, UserOrganizationStatus},
|
||||
lib::get_pg_pool,
|
||||
models::{Organization, User, UserToOrganization},
|
||||
schema::{organizations, users_to_organizations},
|
||||
|
@ -86,7 +86,7 @@ async fn post_organization_handler(user: &User, name: String) -> Result<UserInfo
|
|||
let organization_user = UserToOrganization {
|
||||
user_id: user.id.clone(),
|
||||
organization_id: organization.id,
|
||||
role: UserOrganizationRole::Owner,
|
||||
role: UserOrganizationRole::WorkspaceAdmin,
|
||||
sharing_setting: SharingSetting::Public,
|
||||
edit_sql: true,
|
||||
upload_csv: true,
|
||||
|
@ -98,6 +98,7 @@ async fn post_organization_handler(user: &User, name: String) -> Result<UserInfo
|
|||
created_by: user.id.clone(),
|
||||
updated_by: user.id.clone(),
|
||||
deleted_by: None,
|
||||
status: UserOrganizationStatus::Active,
|
||||
};
|
||||
|
||||
let mut conn = get_pg_pool().get().await?;
|
||||
|
|
|
@ -7,7 +7,7 @@ use uuid::Uuid;
|
|||
|
||||
use crate::{
|
||||
database::{
|
||||
enums::{SharingSetting, UserOrganizationRole},
|
||||
enums::{SharingSetting, UserOrganizationRole, UserOrganizationStatus},
|
||||
lib::{get_pg_pool, UserConfig},
|
||||
models::{User, UserToOrganization},
|
||||
schema::{users, users_to_organizations},
|
||||
|
@ -109,6 +109,7 @@ async fn post_user_handler(
|
|||
created_by: *user_id,
|
||||
updated_by: *user_id,
|
||||
deleted_by: None,
|
||||
status: UserOrganizationStatus::Active,
|
||||
};
|
||||
|
||||
let mut conn = get_pg_pool().get().await?;
|
||||
|
|
|
@ -121,8 +121,8 @@ async fn run_dataset_sql_handler(
|
|||
.filter(users_to_organizations::user_id.eq(user_id))
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Admin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Owner)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.select(users_to_organizations::user_id)
|
||||
.first::<Uuid>(&mut conn)
|
||||
|
|
|
@ -298,8 +298,8 @@ async fn is_organization_admin_or_owner(user_id: Arc<Uuid>, message_id: Arc<Uuid
|
|||
}
|
||||
};
|
||||
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::Admin
|
||||
|| is_organization_admin == UserOrganizationRole::Owner
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::WorkspaceAdmin
|
||||
|| is_organization_admin == UserOrganizationRole::DataAdmin
|
||||
{
|
||||
true
|
||||
} else {
|
||||
|
|
|
@ -522,8 +522,8 @@ async fn is_organization_admin_or_owner(user_id: Arc<Uuid>, thread_id: Arc<Uuid>
|
|||
}
|
||||
};
|
||||
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::Admin
|
||||
|| is_organization_admin == UserOrganizationRole::Owner
|
||||
let is_organization_adminig = if is_organization_admin == UserOrganizationRole::WorkspaceAdmin
|
||||
|| is_organization_admin == UserOrganizationRole::DataAdmin
|
||||
{
|
||||
true
|
||||
} else {
|
||||
|
|
|
@ -10,7 +10,7 @@ use uuid::Uuid;
|
|||
|
||||
use crate::{
|
||||
database::{
|
||||
enums::{SharingSetting, TeamToUserRole, UserOrganizationRole},
|
||||
enums::{SharingSetting, TeamToUserRole, UserOrganizationRole, UserOrganizationStatus},
|
||||
lib::{get_pg_pool, UserConfig},
|
||||
models::{TeamToUser, User, UserToOrganization},
|
||||
schema::{teams_to_users, users, users_to_organizations},
|
||||
|
@ -97,7 +97,8 @@ async fn invite_users_handler(user: &User, req: InviteUsersRequest) -> Result<()
|
|||
let user_to_organization = UserToOrganization {
|
||||
user_id: new_user.id,
|
||||
organization_id: organization.id,
|
||||
role: UserOrganizationRole::Member,
|
||||
role: UserOrganizationRole::Querier,
|
||||
status: UserOrganizationStatus::Active,
|
||||
created_at: Utc::now(),
|
||||
updated_at: Utc::now(),
|
||||
sharing_setting: SharingSetting::Public,
|
||||
|
|
|
@ -53,8 +53,8 @@ pub async fn modeling_query_engine(
|
|||
.filter(data_sources::id.eq(data_source_id))
|
||||
.filter(
|
||||
users_to_organizations::role
|
||||
.eq(UserOrganizationRole::Admin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::Owner)),
|
||||
.eq(UserOrganizationRole::WorkspaceAdmin)
|
||||
.or(users_to_organizations::role.eq(UserOrganizationRole::DataAdmin)),
|
||||
)
|
||||
.select(users_to_organizations::user_id)
|
||||
.first::<Uuid>(&mut conn)
|
||||
|
|
Loading…
Reference in New Issue