J'essaie d'empêcher les utilisateurs sans accès administratif d'enregistrer un formulaire avec l'état «complet» sélectionné, s'il n'était pas déjà sélectionné (par exemple, les utilisateurs sont autorisés à ouvrir des formulaires et à apporter des modifications à leurs données, même si le statut est prêt à être rempli, ils ne peuvent tout simplement pas marquer leurs documents comme complets).Comment empêcher les utilisateurs sans accès administrateur d'enregistrer un formulaire avec un certain statut dans les visages
La raison pour laquelle les utilisateurs sont autorisés à apporter des modifications aux documents «terminés» est que l'enregistrement électronique est juste le reflet d'un processus de travail en coulisses. Pour qu'un article soit marqué comme complet, plusieurs autres processus doivent avoir été complétés. L'information peut être éditée après coup pour tenir compte des erreurs de transcription ou de verbiage.
Je pense qu'il serait suffisant d'utiliser un simple événement onChange
qui re-sélectionne la sélection précédente si un utilisateur tente de changement l'état de remplir. Je cherche une manière élégante de le faire, heureusement sans stocker la sélection précédente dans un champ séparé sur la page, car il est déjà stocké ailleurs. le grantBacking.editGrant.statusCode
est le code d'état enregistré/en cours pour le formulaire. En outre, il existe au moins trois types de rôles différents, y compris l'accès en lecture, «Ajouter» et «Administrateur». Lire - auto-explicatif, Ajouter - Peut apporter des modifications au formulaire, mais ne devrait pas être en mesure de remplir un formulaire, et Administrateur - peut apporter des modifications et peut marquer un état de formulaire comme "complet".
C'est ce que j'ai jusqu'à présent:
<t:panelGroup>
<sec:authorize ifNotGranted="ADMINISTRATOR">
<h:selectOneMenu id="grantStatus" onchange="#checkGrantStatusPermissions(this,grantBacking.editGrant.statusCode)" onmouseover="Tip('#{msg_bundle.grant_status_help}')" value="#{grantBacking.editGrant.statusCode}">
<f:selectItems value="#{grantBacking.grantSelectStatusForNonAdmin}" />
</h:selectOneMenu>
</sec:authorize>
<sec:authorize ifAnyGranted="ADMINISTRATOR">
<h:selectOneMenu id="grantStatusForAdmin" onmouseover="Tip('#{msg_bundle.grant_status_help}')" value="#{grantBacking.editGrant.statusCode}">
<f:selectItems value="#{grantBacking.grantSelectStatus}" />
</h:selectOneMenu>
</sec:authorize>
<sec:authorize ifAnyGranted="ADD">
<a4j:commandLink id="qsave2" render="@all" onmouseover="Tip('Click to quick save')" action="#{grantBacking.saveGrant}">
<h:graphicImage title="Click this to quick save the grant/contract" style="border-style:none;" height="20px" width="15px" library="default" name="img/icons/disk.png" />
</a4j:commandLink>
</sec:authorize>
<script type="text/javascript">
function checkGrantStatusPermissions(field, originalValue){
if(originalValue.equalsIgnoreCase("complete")){
return
}
else{
document.getElementByID(field).value = originalValue.value;
}
}
</script>
Ne pouvez-vous pas simplement supprimer "complete" de la liste d'options si ces conditions ne sont pas remplies? Si vous n'aimez pas cette approche, vous pouvez également la désactiver en utilisant les attributs var & itemDisabled de la balise selectItems. – axemoi
J'ai d'abord pensé à cela, mais le formulaire enregistre tous les champs si l'utilisateur clique sur 'enregistrer'. Cela signifie que si le statut ne s'affiche plus "complet" lorsque l'utilisateur clique sur Enregistrer, le statut sera modifié. – Jolley71717
Pouvez-vous mieux décrire ce que l'utilisateur est autorisé à faire? Si le statut est déjà "complet" alors pourquoi un utilisateur normal est-il autorisé à le modifier? – Makhiel