Enable tagging only in some categories

Non sono tanto preoccupato per lo spreco di spazio, ma ho trovato un’altra “questione” nel tuo codice JS, che per il resto è molto buono. Forse puoi darci un’occhiata?

Abbiamo gruppi di tag “solo per lo staff” (ad esempio tag nascosti e tag di sistema) e gruppi di tag obbligatori per gli utenti per categoria. Entrambi sono collegati tramite “Ristretta questi gruppi di tag a questa categoria”.

Ora, questo codice controlla solo se una categoria consente tag o se tag_groups.length > 0 o allowed_tags > 0, ma sfortunatamente questo è sempre vero poiché abbiamo anche quei gruppi di tag solo per lo staff nei gruppi di tag ristretti.

Il codice potrebbe essere modificato per tenere conto del contesto dell’utente e verificare se ci sono davvero tag disponibili per questo specifico utente?

 if(category != null) {
                if (
                    category.allow_global_tags == true ||
                    category.allowed_tag_groups.length > 0 ||
                    category.allowed_tags.length > 0
                ) {
                    toggleTagChooser("visible");
                }
            }

Dovrebbe essere possibile contare solo i tag pubblici nell’array category.allowed_tag_groups.length per gli utenti non staff (o sono disponibili solo i nomi e non gli stati nell’array?):

public_category.allowed_tag_groups = [public_tag_group.name, staff_only_tag_group.name]
private_category.allowed_tag_groups = [private_tag_group.name, staff_only_tag_group.name]

Ok, aggiornamento:

Nel nostro caso, esamineremo i nomi in allowed_tag_groups e li escluderemo dall’array se currentUser non è staff. Ma è un workaround sporco, poiché non so come aggiungere il contesto dell’utente qui (o se ciò sia possibile dato il codice core attuale, non credo di sì).

             var non_staff_tag_groups = category.allowed_tag_groups.filter(filterHidden);
                function filterHidden(value) {
                  if(value.toLowerCase().indexOf("hidden") === -1 && value.toLowerCase().indexOf("system") === -1) return value;
                }
                if (
                    category.allow_global_tags == true ||
                    (category.allowed_tag_groups.length > 0 && this.currentUser.staff) ||
                    (non_staff_tag_groups.length > 0 && !this.currentUser.staff) ||
                    category.allowed_tags.length > 0
                ) {
                    toggleTagChooser("visible");
                }
            }

Ma questo è un hack sporco; l’intera dropdown dei tag nel composer dovrebbe essere più contestuale tramite il core e dovrebbe considerare tutti i casi sopra menzionati.

2 Mi Piace