feat: update competition perm
This commit is contained in:
parent
18ea38f85a
commit
9e9391465d
@ -2,6 +2,7 @@ package fr.titionfire.ffsaf.domain.service;
|
|||||||
|
|
||||||
import fr.titionfire.ffsaf.data.model.CompetitionModel;
|
import fr.titionfire.ffsaf.data.model.CompetitionModel;
|
||||||
import fr.titionfire.ffsaf.data.model.MembreModel;
|
import fr.titionfire.ffsaf.data.model.MembreModel;
|
||||||
|
import fr.titionfire.ffsaf.data.model.RegisterModel;
|
||||||
import fr.titionfire.ffsaf.data.repository.*;
|
import fr.titionfire.ffsaf.data.repository.*;
|
||||||
import fr.titionfire.ffsaf.net2.ServerCustom;
|
import fr.titionfire.ffsaf.net2.ServerCustom;
|
||||||
import fr.titionfire.ffsaf.net2.data.SimpleCompet;
|
import fr.titionfire.ffsaf.net2.data.SimpleCompet;
|
||||||
@ -13,9 +14,7 @@ import fr.titionfire.ffsaf.rest.data.SimpleCompetData;
|
|||||||
import fr.titionfire.ffsaf.rest.data.SimpleRegisterComb;
|
import fr.titionfire.ffsaf.rest.data.SimpleRegisterComb;
|
||||||
import fr.titionfire.ffsaf.rest.exception.DBadRequestException;
|
import fr.titionfire.ffsaf.rest.exception.DBadRequestException;
|
||||||
import fr.titionfire.ffsaf.rest.exception.DForbiddenException;
|
import fr.titionfire.ffsaf.rest.exception.DForbiddenException;
|
||||||
import fr.titionfire.ffsaf.rest.exception.DNotFoundException;
|
|
||||||
import fr.titionfire.ffsaf.utils.CompetitionSystem;
|
import fr.titionfire.ffsaf.utils.CompetitionSystem;
|
||||||
import fr.titionfire.ffsaf.data.model.RegisterModel;
|
|
||||||
import fr.titionfire.ffsaf.utils.SecurityCtx;
|
import fr.titionfire.ffsaf.utils.SecurityCtx;
|
||||||
import fr.titionfire.ffsaf.utils.Utils;
|
import fr.titionfire.ffsaf.utils.Utils;
|
||||||
import io.quarkus.cache.Cache;
|
import io.quarkus.cache.Cache;
|
||||||
@ -144,11 +143,8 @@ public class CompetitionService {
|
|||||||
if (data.getId() == null) {
|
if (data.getId() == null) {
|
||||||
return combRepository.find("userId = ?1", securityCtx.getSubject()).firstResult()
|
return combRepository.find("userId = ?1", securityCtx.getSubject()).firstResult()
|
||||||
.invoke(Unchecked.consumer(combModel -> {
|
.invoke(Unchecked.consumer(combModel -> {
|
||||||
if (combModel == null)
|
if (!securityCtx.getRoles().contains("create_compet") && !securityCtx.getRoles().contains("federation_admin"))
|
||||||
throw new DNotFoundException("Profile non trouvé");
|
throw new DForbiddenException("Vous ne pouvez pas créer de compétition");
|
||||||
if (data.getSystem() == CompetitionSystem.SAFCA)
|
|
||||||
if (!securityCtx.getRoles().contains("safca_create_compet"))
|
|
||||||
throw new DForbiddenException("Vous ne pouvez pas créer de compétition SAFCA");
|
|
||||||
}))
|
}))
|
||||||
.map(MembreModel::getClub)
|
.map(MembreModel::getClub)
|
||||||
.chain(clubModel -> {
|
.chain(clubModel -> {
|
||||||
|
|||||||
@ -253,6 +253,7 @@ public class KeycloakService {
|
|||||||
return null;
|
return null;
|
||||||
}) : Uni.createFrom().nullItem())
|
}) : Uni.createFrom().nullItem())
|
||||||
.invoke(user -> membreModel.setUserId(user.getId()))
|
.invoke(user -> membreModel.setUserId(user.getId()))
|
||||||
|
.call(user -> updateRole(user.getId(), List.of("safca_user"), List.of()))
|
||||||
.call(user -> enabled_email ? reactiveMailer.send(
|
.call(user -> enabled_email ? reactiveMailer.send(
|
||||||
Mail.withText(user.getEmail(),
|
Mail.withText(user.getEmail(),
|
||||||
"FFSAF - Creation de votre compte sur l'intranet",
|
"FFSAF - Creation de votre compte sur l'intranet",
|
||||||
|
|||||||
@ -115,8 +115,8 @@ public class CompteEndpoints {
|
|||||||
else toRemove.add("safca_super_admin");
|
else toRemove.add("safca_super_admin");
|
||||||
if (form.isSafca_user()) toAdd.add("safca_user");
|
if (form.isSafca_user()) toAdd.add("safca_user");
|
||||||
else toRemove.add("safca_user");
|
else toRemove.add("safca_user");
|
||||||
if (form.isSafca_create_compet()) toAdd.add("safca_create_compet");
|
if (form.isCreate_compet()) toAdd.add("create_compet");
|
||||||
else toRemove.add("safca_create_compet");
|
else toRemove.add("create_compet");
|
||||||
|
|
||||||
return service.updateRole(id, toAdd, toRemove);
|
return service.updateRole(id, toAdd, toRemove);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,9 +16,9 @@ public class MemberPermForm {
|
|||||||
@FormParam("safca_user")
|
@FormParam("safca_user")
|
||||||
private boolean safca_user;
|
private boolean safca_user;
|
||||||
|
|
||||||
@Schema(description = "Indique si le membre peut créer des compétitions sur SAFCA.", example = "false", required = true)
|
@Schema(description = "Indique si le membre peut créer des compétitions.", example = "false", required = true)
|
||||||
@FormParam("safca_create_compet")
|
@FormParam("create_compet")
|
||||||
private boolean safca_create_compet;
|
private boolean create_compet;
|
||||||
|
|
||||||
@Schema(description = "Indique si le membre est un super administrateur SAFCA.", example = "false", required = true)
|
@Schema(description = "Indique si le membre est un super administrateur SAFCA.", example = "false", required = true)
|
||||||
@FormParam("safca_super_admin")
|
@FormParam("safca_super_admin")
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export function PremForm({userData}) {
|
|||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("federation_admin", event.target.federation_admin?.checked);
|
formData.append("federation_admin", event.target.federation_admin?.checked);
|
||||||
formData.append("safca_user", event.target.safca_user?.checked);
|
formData.append("safca_user", event.target.safca_user?.checked);
|
||||||
formData.append("safca_create_compet", event.target.safca_create_compet?.checked);
|
formData.append("create_compet", event.target.create_compet?.checked);
|
||||||
formData.append("safca_super_admin", event.target.safca_super_admin?.checked);
|
formData.append("safca_super_admin", event.target.safca_super_admin?.checked);
|
||||||
|
|
||||||
apiAxios.put(`/compte/${userData.userId}/roles`, formData, {
|
apiAxios.put(`/compte/${userData.userId}/roles`, formData, {
|
||||||
@ -68,6 +68,8 @@ function PremFormContent({userData}) {
|
|||||||
? <>
|
? <>
|
||||||
<CheckField name="federation_admin" text="Administrateur de la fédération"
|
<CheckField name="federation_admin" text="Administrateur de la fédération"
|
||||||
value={data.includes("federation_admin")}/>
|
value={data.includes("federation_admin")}/>
|
||||||
|
<CheckField name="create_compet" text="Créer des compétion"
|
||||||
|
value={data.includes("create_compet")}/>
|
||||||
</>
|
</>
|
||||||
: error && <AxiosError error={error}/>}
|
: error && <AxiosError error={error}/>}
|
||||||
</div>
|
</div>
|
||||||
@ -76,12 +78,10 @@ function PremFormContent({userData}) {
|
|||||||
{data
|
{data
|
||||||
? <>
|
? <>
|
||||||
<CheckField name="safca_user" text="Accès à l'application" value={data.includes("safca_user")}/>
|
<CheckField name="safca_user" text="Accès à l'application" value={data.includes("safca_user")}/>
|
||||||
<CheckField name="safca_create_compet" text="Créer des compétion"
|
|
||||||
value={data.includes("safca_create_compet")}/>
|
|
||||||
<CheckField name="safca_super_admin" text="Super administrateur"
|
<CheckField name="safca_super_admin" text="Super administrateur"
|
||||||
value={data.includes("safca_super_admin")}/>
|
value={data.includes("safca_super_admin")}/>
|
||||||
</>
|
</>
|
||||||
: error && <AxiosError error={error}/>}
|
: error && <AxiosError error={error}/>}
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import {useLoadingSwitcher} from "../../hooks/useLoading.jsx";
|
|||||||
import {useFetch} from "../../hooks/useFetch.js";
|
import {useFetch} from "../../hooks/useFetch.js";
|
||||||
import {AxiosError} from "../../components/AxiosError.jsx";
|
import {AxiosError} from "../../components/AxiosError.jsx";
|
||||||
import {ThreeDots} from "react-loader-spinner";
|
import {ThreeDots} from "react-loader-spinner";
|
||||||
|
import {useAuth} from "../../hooks/useAuth.jsx";
|
||||||
|
|
||||||
|
|
||||||
export function CompetitionList() {
|
export function CompetitionList() {
|
||||||
@ -26,11 +27,13 @@ export function CompetitionList() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function MakeCentralPanel({data, navigate}) {
|
function MakeCentralPanel({data, navigate}) {
|
||||||
|
const {userinfo} = useAuth()
|
||||||
|
|
||||||
return <>
|
return <>
|
||||||
|
{userinfo?.roles?.includes("create_compet") &&
|
||||||
<div className="col mb-2" style={{textAlign: 'right', marginTop: '1em'}}>
|
<div className="col mb-2" style={{textAlign: 'right', marginTop: '1em'}}>
|
||||||
<button type="button" className="btn btn-primary" onClick={() => navigate("/competition/0")}>Nouvelle competition</button>
|
<button type="button" className="btn btn-primary" onClick={() => navigate("/competition/0")}>Nouvelle competition</button>
|
||||||
</div>
|
</div> }
|
||||||
<div className="mb-4">
|
<div className="mb-4">
|
||||||
<div className="list-group">
|
<div className="list-group">
|
||||||
{data.map(req => (<MakeRow key={req.id} data={req} navigate={navigate}/>))}
|
{data.map(req => (<MakeRow key={req.id} data={req} navigate={navigate}/>))}
|
||||||
@ -58,4 +61,4 @@ function Def() {
|
|||||||
<li className="list-group-item"><ThreeDots/></li>
|
<li className="list-group-item"><ThreeDots/></li>
|
||||||
<li className="list-group-item"><ThreeDots/></li>
|
<li className="list-group-item"><ThreeDots/></li>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user