init
This commit is contained in:
@@ -70,3 +70,9 @@ pub struct ChannelRolePermissionResponse {
|
||||
pub role_id: Uuid,
|
||||
pub permissions: u64,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, ToSchema)]
|
||||
pub struct ChannelPermissionsResponse {
|
||||
pub users: Vec<ChannelUserPermissionResponse>,
|
||||
pub roles: Vec<ChannelRolePermissionResponse>,
|
||||
}
|
||||
|
||||
@@ -59,6 +59,16 @@ impl ChannelRepository {
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn list_user_permissions(
|
||||
&self,
|
||||
channel_id: Uuid,
|
||||
) -> AnyResult<Vec<channel_user_permission::Model>> {
|
||||
Ok(channel_user_permission::Entity::find()
|
||||
.filter(channel_user_permission::Column::ChannelId.eq(channel_id))
|
||||
.all(&self.context.db)
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn set_user_permission(
|
||||
&self,
|
||||
channel_id: Uuid,
|
||||
@@ -109,6 +119,16 @@ impl ChannelRepository {
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn list_role_permissions(
|
||||
&self,
|
||||
channel_id: Uuid,
|
||||
) -> AnyResult<Vec<channel_role_permission::Model>> {
|
||||
Ok(channel_role_permission::Entity::find()
|
||||
.filter(channel_role_permission::Column::ChannelId.eq(channel_id))
|
||||
.all(&self.context.db)
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn set_role_permission(
|
||||
&self,
|
||||
channel_id: Uuid,
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core::state::AppState;
|
||||
use crate::http::context::Superuser;
|
||||
use crate::http::error::HTTPError;
|
||||
use crate::domain::dto::channel::{
|
||||
ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse,
|
||||
ChannelQueryParams, ChannelResponse, ChannelPermissionsResponse, ChannelRolePermissionResponse,
|
||||
ChannelUserPermissionResponse, CreateChannelRequest, SetChannelPermissionRequest,
|
||||
UpdateChannelRequest,
|
||||
};
|
||||
@@ -69,6 +69,26 @@ pub async fn get_by_id(
|
||||
Ok(Json(mapper::channel_model_to_channel_response(channel)))
|
||||
}
|
||||
|
||||
/// Liste les permissions directes configurées pour un canal.
|
||||
#[utoipa::path(
|
||||
get,
|
||||
path = "/channels/{channel_id}/permissions",
|
||||
params(("channel_id" = Uuid, Path, description = "ID du canal")),
|
||||
responses((status = 200, body = ChannelPermissionsResponse), (status = 404, description = "Canal non trouvé")),
|
||||
tag = "Channel Permissions"
|
||||
)]
|
||||
pub async fn list_permissions(
|
||||
State(state): State<AppState>,
|
||||
Path(channel_id): Path<Uuid>,
|
||||
) -> Result<Json<ChannelPermissionsResponse>, HTTPError> {
|
||||
state.repositories.channel.get_by_id(channel_id).await?.ok_or(HTTPError::NotFound)?;
|
||||
let (users, roles) = tokio::try_join!(
|
||||
state.repositories.channel.list_user_permissions(channel_id),
|
||||
state.repositories.channel.list_role_permissions(channel_id),
|
||||
)?;
|
||||
Ok(Json(mapper::channel_permissions_to_response(users, roles)))
|
||||
}
|
||||
|
||||
/// Crée un nouveau channel
|
||||
#[utoipa::path(
|
||||
post,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::domain::dto::channel::{
|
||||
ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse,
|
||||
ChannelPermissionsResponse, ChannelQueryParams, ChannelResponse, ChannelRolePermissionResponse,
|
||||
ChannelUserPermissionResponse, CreateChannelRequest, UpdateChannelRequest,
|
||||
};
|
||||
use crate::models::{channel, channel_role_permission, channel_user_permission};
|
||||
@@ -71,6 +71,16 @@ pub fn channel_role_permission_to_response(
|
||||
}
|
||||
}
|
||||
|
||||
pub fn channel_permissions_to_response(
|
||||
users: Vec<channel_user_permission::Model>,
|
||||
roles: Vec<channel_role_permission::Model>,
|
||||
) -> ChannelPermissionsResponse {
|
||||
ChannelPermissionsResponse {
|
||||
users: users.into_iter().map(channel_user_permission_to_response).collect(),
|
||||
roles: roles.into_iter().map(channel_role_permission_to_response).collect(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn query_params_to_channel_filter(params: ChannelQueryParams) -> ChannelFilter {
|
||||
ChannelFilter {
|
||||
server_id: params.server_id,
|
||||
|
||||
@@ -11,6 +11,10 @@ pub fn router() -> Router<AppState> {
|
||||
.put(handlers::update)
|
||||
.delete(handlers::delete),
|
||||
)
|
||||
.route(
|
||||
"/channels/{channel_id}/permissions",
|
||||
get(handlers::list_permissions),
|
||||
)
|
||||
.route(
|
||||
"/channels/{channel_id}/permissions/users/{user_id}",
|
||||
get(handlers::get_user_permission)
|
||||
|
||||
Reference in New Issue
Block a user