add: developer pass
This commit is contained in:
parent
636ecce9f4
commit
02f3d08926
14 changed files with 355 additions and 101 deletions
|
@ -1,5 +1,5 @@
|
|||
use oiseau::cache::Cache;
|
||||
use crate::model::apps::{AppDataQuery, AppDataQueryResult, AppDataSelectMode, AppDataSelectQuery};
|
||||
use crate::model::apps::{AppDataQuery, AppDataQueryResult, AppDataSelectMode};
|
||||
use crate::model::{apps::AppData, permissions::FinePermission, Error, Result};
|
||||
use crate::{auto_method, DataManager};
|
||||
use oiseau::{PostgresRow, execute, get, query_row, query_rows, params};
|
||||
|
@ -51,13 +51,7 @@ impl DataManager {
|
|||
Err(e) => return Err(Error::DatabaseConnection(e.to_string())),
|
||||
};
|
||||
|
||||
let query_str = query.to_string().replace(
|
||||
"%q%",
|
||||
&match query.query {
|
||||
AppDataSelectQuery::KeyIs(_) => format!("k = $1"),
|
||||
AppDataSelectQuery::LikeJson(_, _) => format!("v LIKE $1"),
|
||||
},
|
||||
);
|
||||
let query_str = query.to_string().replace("%q%", &query.query.selector());
|
||||
|
||||
let res = match query.mode {
|
||||
AppDataSelectMode::One(_) => AppDataQueryResult::One(
|
||||
|
@ -98,13 +92,7 @@ impl DataManager {
|
|||
|
||||
let query_str = query
|
||||
.to_string()
|
||||
.replace(
|
||||
"%q%",
|
||||
&match query.query {
|
||||
AppDataSelectQuery::KeyIs(_) => format!("k = $1"),
|
||||
AppDataSelectQuery::LikeJson(_, _) => format!("v LIKE $1"),
|
||||
},
|
||||
)
|
||||
.replace("%q%", &query.query.selector())
|
||||
.replace("SELECT * FROM", "SELECT id FROM");
|
||||
|
||||
if let Err(e) = execute!(
|
||||
|
|
|
@ -3,7 +3,7 @@ use crate::model::{
|
|||
apps::{AppQuota, ThirdPartyApp},
|
||||
auth::User,
|
||||
oauth::AppScope,
|
||||
permissions::FinePermission,
|
||||
permissions::{FinePermission, SecondaryPermission},
|
||||
Error, Result,
|
||||
};
|
||||
use crate::{auto_method, DataManager};
|
||||
|
@ -72,10 +72,15 @@ impl DataManager {
|
|||
// check number of apps
|
||||
let owner = self.get_user_by_id(data.owner).await?;
|
||||
|
||||
if !owner.permissions.check(FinePermission::SUPPORTER) {
|
||||
let apps = self.get_apps_by_owner(data.owner).await?;
|
||||
if !owner
|
||||
.secondary_permissions
|
||||
.check(SecondaryPermission::DEVELOPER_PASS)
|
||||
{
|
||||
let apps = self
|
||||
.get_table_row_count_where("apps", &format!("owner = {}", owner.id))
|
||||
.await? as usize;
|
||||
|
||||
if apps.len() >= Self::MAXIMUM_FREE_APPS {
|
||||
if apps >= Self::MAXIMUM_FREE_APPS {
|
||||
return Err(Error::MiscError(
|
||||
"You already have the maximum number of apps you can have".to_string(),
|
||||
));
|
||||
|
|
|
@ -85,7 +85,7 @@ impl DataManager {
|
|||
|
||||
let res = query_row!(
|
||||
&conn,
|
||||
&format!("SELECT COUNT(*)::int FROM {} {}", table, r#where),
|
||||
&format!("SELECT COUNT(*)::int FROM {} WHERE {}", table, r#where),
|
||||
params![],
|
||||
|x| Ok(x.get::<usize, i32>(0))
|
||||
);
|
||||
|
|
|
@ -3,6 +3,7 @@ use super::common::NAME_REGEX;
|
|||
use oiseau::cache::Cache;
|
||||
use crate::model::communities::{CommunityContext, CommunityJoinAccess, CommunityMembership};
|
||||
use crate::model::communities_permissions::CommunityPermission;
|
||||
use crate::model::permissions::SecondaryPermission;
|
||||
use crate::model::{
|
||||
Error, Result,
|
||||
auth::User,
|
||||
|
@ -255,7 +256,11 @@ impl DataManager {
|
|||
|
||||
// check is_forge
|
||||
// only supporters can CREATE forge communities... anybody can contribute to them
|
||||
if data.is_forge && !owner.permissions.check(FinePermission::SUPPORTER) {
|
||||
if data.is_forge
|
||||
&& !owner
|
||||
.secondary_permissions
|
||||
.check(SecondaryPermission::DEVELOPER_PASS)
|
||||
{
|
||||
return Err(Error::RequiresSupporter);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue