2010-08-26 5 views
0

Imaginons que nous ayons une page d'options de confidentialité dans le réseau social; deux groupes de boutons radio.Dépendance entre groupe ou radiobuttons, bonnes pratiques?

Allow to post on wall p f c (groupA) 
Allow to view wall  p f c (groupB) 

p = public 
f = only friends 
c = closed 

Il est évident qu'il existe une dépendance entre ces groupes de cases à cocher. Par exemple, nous devrions définir automatiquement le groupe A = c lorsque le groupe B = c; Le mur d'observation est fermé, les commentaires sur les murs doivent également être fermés, etc.

Il est possible de résoudre ce problème en utilisant de nombreux if, mais nous aurons une structure de contrôle très complexe comme résultat.

Une bonne solution?

Merci

Répondre

0

Vous avez 2 ensembles d'autorisations et « écrire » les autorisations ne doit jamais être moins restrictive que read. Si (0 - pas d'accès, 1- limité [amis seulement], 2 - accès public), puis après avoir changé la valeur dans GroupB valider GroupA valeur peut ressembler à GroupA.value = (GroupA.value <= GroupB.value) ? GroupA.value : GroupB.value. GroupB - autorisations de lecture, GroupA - autorisations d'écriture.

0

Définir un masque de bits pour la visualisation, et un autre masque de bit pour l'affichage, avec un bit dans chacun pour le public et les amis (fermé signifie simplement que les deux bits sont mis à 0). Un bit défini sur 1 autorise l'accès et un bit défini sur 0 refuse l'accès. Le masque de bits "post" avec le masque de bits "vue" pour s'assurer que tous les bits qui sont effacés dans le masque de bits "vue" sont également effacés dans le masque de bits "post".

quelque chose comme C ou C++, ce ressemblerait à quelque chose comme ceci:

unsigned view; 
unsigned post; 

enum { friends = 1, public = 2 }; 

view = friends; 
post = friends | public; // create an invalid combination 
post &= view;    // correct the invalid combination; 
0

Vous pouvez également définir les comparisions dans une structure et vérifier chaque entrée dans une fonction.

je veux dire quelque chose comme ça dans C:

#define ACCESS_CLOSED 0 
#define ACCESS_FRIEND 1 
#define ACCESS_PUBLIC 2 

typedef struct dep { 
    int *master; 
    int masterval; 
    int *slave; 
    int slaveval; 
} dep_t; 

int checkdeps(dep_t *deps, int n) 
{ 
    int i; 

    for (i=0; i<n; i++) { 
     if (*(deps[i].master) == deps[i].masterval) 
      *(deps[i].slave) = deps[i].slaveval; 
    } 
} 

int main(void) 
{ 
    int groupA = ACCESS_FRIEND; 
    int groupB = ACCESS_FRIEND; 
    int groupC = ACCESS_FRIEND; 

    // if the first argument has the value of the second argument 
    // then the third is set to the value from the fourth 
    dep_t deps[] = { 
     { &groupB, ACCESS_CLOSED, &groupA, ACCESS_CLOSED }, 
     { &groupB, ACCESS_FRIEND, &groupC, ACCESS_CLOSED } 
    }; 

    groupB = ACCESS_CLOSED; 
    checkdeps(deps, sizeof(deps)/sizeof(dep_t)); 

    printf("A: %d, B: %d, C: %d\n", groupA, groupB, groupC); 

    return 0; 
}