init
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -476,6 +476,46 @@ impl MigrationTrait for Migration {
|
|||||||
// Permissions
|
// Permissions
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
manager
|
||||||
|
.create_table(
|
||||||
|
Table::create()
|
||||||
|
.table(Alias::new("server_user_permission"))
|
||||||
|
.if_not_exists()
|
||||||
|
.col(ColumnDef::new(Alias::new("server_id")).uuid().not_null())
|
||||||
|
.col(ColumnDef::new(Alias::new("user_id")).uuid().not_null())
|
||||||
|
.col(
|
||||||
|
ColumnDef::new(Alias::new("permissions"))
|
||||||
|
.big_integer()
|
||||||
|
.not_null()
|
||||||
|
.default(0),
|
||||||
|
)
|
||||||
|
.primary_key(
|
||||||
|
Index::create()
|
||||||
|
.name("pk_server_user_permission")
|
||||||
|
.col(Alias::new("server_id"))
|
||||||
|
.col(Alias::new("user_id")),
|
||||||
|
)
|
||||||
|
.foreign_key(
|
||||||
|
ForeignKey::create()
|
||||||
|
.name("fk_server_user_permission_server")
|
||||||
|
.from(
|
||||||
|
Alias::new("server_user_permission"),
|
||||||
|
Alias::new("server_id"),
|
||||||
|
)
|
||||||
|
.to(Alias::new("server"), Alias::new("id"))
|
||||||
|
.on_delete(ForeignKeyAction::Cascade),
|
||||||
|
)
|
||||||
|
.foreign_key(
|
||||||
|
ForeignKey::create()
|
||||||
|
.name("fk_server_user_permission_user")
|
||||||
|
.from(Alias::new("server_user_permission"), Alias::new("user_id"))
|
||||||
|
.to(Alias::new("user"), Alias::new("id"))
|
||||||
|
.on_delete(ForeignKeyAction::Cascade),
|
||||||
|
)
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
manager
|
manager
|
||||||
.create_table(
|
.create_table(
|
||||||
Table::create()
|
Table::create()
|
||||||
@@ -674,6 +714,7 @@ impl MigrationTrait for Migration {
|
|||||||
"computed_permission",
|
"computed_permission",
|
||||||
"channel_user_permission",
|
"channel_user_permission",
|
||||||
"channel_role_permission",
|
"channel_role_permission",
|
||||||
|
"server_user_permission",
|
||||||
"server_role_permission",
|
"server_role_permission",
|
||||||
"attachment",
|
"attachment",
|
||||||
"message",
|
"message",
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
use super::types::{ServerExplorerItem, ServerTree};
|
use super::types::{ServerExplorerItem, ServerTree};
|
||||||
use super::{AnyResult, RepositoryContext};
|
use super::{AnyResult, RepositoryContext};
|
||||||
use crate::models::{category, channel, role, server, server_user};
|
use crate::models::{
|
||||||
|
category, channel, role, server, server_role_permission, server_user, server_user_permission,
|
||||||
|
};
|
||||||
use sea_orm::prelude::*;
|
use sea_orm::prelude::*;
|
||||||
use sea_orm::{ActiveModelTrait, QuerySelect, Set};
|
use sea_orm::{ActiveModelTrait, QuerySelect, Set};
|
||||||
|
|
||||||
|
use sea_orm::sea_query::OnConflict;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
@@ -100,6 +103,80 @@ impl ServerRepository {
|
|||||||
let res = server::Entity::find().count(&self.context.db).await?;
|
let res = server::Entity::find().count(&self.context.db).await?;
|
||||||
Ok(res as usize)
|
Ok(res as usize)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn set_user_permission(
|
||||||
|
&self,
|
||||||
|
server_id: Uuid,
|
||||||
|
user_id: Uuid,
|
||||||
|
permissions: u64,
|
||||||
|
) -> AnyResult<()> {
|
||||||
|
let permission = server_user_permission::ActiveModel {
|
||||||
|
server_id: Set(server_id),
|
||||||
|
user_id: Set(user_id),
|
||||||
|
permissions: Set(permissions as i64),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
server_user_permission::Entity::insert(permission)
|
||||||
|
.on_conflict(
|
||||||
|
OnConflict::columns([
|
||||||
|
server_user_permission::Column::ServerId,
|
||||||
|
server_user_permission::Column::UserId,
|
||||||
|
])
|
||||||
|
.update_columns([server_user_permission::Column::Permissions])
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.exec(&self.context.db)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn remove_user_permission(&self, server_id: Uuid, user_id: Uuid) -> AnyResult<()> {
|
||||||
|
server_user_permission::Entity::delete_many()
|
||||||
|
.filter(server_user_permission::Column::ServerId.eq(server_id))
|
||||||
|
.filter(server_user_permission::Column::UserId.eq(user_id))
|
||||||
|
.exec(&self.context.db)
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn set_role_permission(
|
||||||
|
&self,
|
||||||
|
server_id: Uuid,
|
||||||
|
role_id: Uuid,
|
||||||
|
permissions: u64,
|
||||||
|
) -> AnyResult<()> {
|
||||||
|
let permission = server_role_permission::ActiveModel {
|
||||||
|
server_id: Set(server_id),
|
||||||
|
role_id: Set(role_id),
|
||||||
|
permissions: Set(permissions as i64),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
let result = server_role_permission::Entity::insert(permission)
|
||||||
|
.on_conflict(
|
||||||
|
OnConflict::columns([
|
||||||
|
server_role_permission::Column::ServerId,
|
||||||
|
server_role_permission::Column::RoleId,
|
||||||
|
])
|
||||||
|
.update_columns([server_role_permission::Column::Permissions])
|
||||||
|
.to_owned(),
|
||||||
|
)
|
||||||
|
.exec(&self.context.db)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn remove_role_permission(&self, server_id: Uuid, role_id: Uuid) -> AnyResult<()> {
|
||||||
|
server_role_permission::Entity::delete_many()
|
||||||
|
.filter(server_role_permission::Column::ServerId.eq(server_id))
|
||||||
|
.filter(server_role_permission::Column::RoleId.eq(role_id))
|
||||||
|
.exec(&self.context.db)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
|
|||||||
Reference in New Issue
Block a user