Salut tous le monde,

Je viens vers vous avec un petit dilemne.
Je suis en train de développer un site avec une partie non connecté et une partie connecté. Ces deux partie utilisent Angularjs 1 et du coup je ne sais pas si je dois faire 2 applications différents ou une seule.

Quelqu'un aurait-il un conseil ?

8 réponses


betaWeb
Réponse acceptée

Salut,

C'est à toi de voir ce que tu préfère, en sachant que si les 2 apps doivent communiquer ça risque de complexifier les choses.

Maenhyr
Réponse acceptée

Une application est suffisante. Tu peux proteger tes routes avec AngularJS.

que veux tu dire par connecté/non connecté ?

yoann25
Auteur

La partie non connecté est une partie du site accessible par tous le monde et la partie connecté est accessible seulement après une identification avec un identifiant et un mot de passe. Est ce que ca t'aide un peu plus ?

yoann25
Auteur

Yes c'est ce vers quoi j'ai tendance a aller. je vais faire des tests et je ferai surement un retour. Merci a vous

Hello pour ma part j'ai fait un blog + réseau social avec donc les mêmes contrainte que toi.
Pour ne pas m'embéter j'utilise un système d'acl au niveau des routes qui me redirige les utilisateurs automatiquement en fonction des droits comme ça dans la déclaration de ma route j'ajoutes par example

    acl: [
        { can: 'rulesSet', is: 'rulesSet', redirect: 'route' }
    ],

can: sert aux droits contextuels par example profile.edit ou blog.post.edit
is: sert à filtrer les groupes example membre, admin ...
redirect: permet de definir la page de redirection
Les rulesSet servent quand à eux à définir plusieurs règle par example 'member || admin'
je passe les rulesSet dans une boucle pour les comparé aux autorisation de l'utilisateur il me remplace comme dans mon example 'member || admin' par 'true || false' puis je les evalue avec un eval() si le code te parle plus je te laisse mes method can et is

                /**
                 *  Eval permissions set return true or false
                 */
                function can(set, permissions) {
                    // Set regex
                    var regex = /[a-z]+\.[a-z]+/ig;// Format string.string flag 'g' to replace all instance of
                    // Replace permissions
                    var testToEval = set.replace(regex, function(motif) {
                        return checkPermission(motif, permissions);
                    });
                    // Return eval
                    return eval(testToEval);
                }
                /**
                 *  Eval roles set return true or false
                 */
                function is(set, roles) {
                    // Set regex
                    var regex = /[a-z]+/ig;// Format string.string flag 'g' to replace all instance of
                    // Replace permissions
                    var testToEval = set.replace(regex, function(role){
                        return checkRole(role, roles);
                    });
                    // Return eval
                    return eval(testToEval);
                }
                /**
                 *  Check permission by motif return true or false
                 */
                function checkPermission(motif, permissions) {
                    // Split permission to context and permission
                    var motifSplit = motif.split(".");
                    var context = motifSplit[0];
                    var permission = motifSplit[1];
                    // Check permissions are not null
                    if (permissions)
                        // Check context exist
                        if (permissions[context])
                            // Check permission exist
                            if (permissions[context][permission])
                                return !!permissions[context][permission];
                    return false
                }
                /**
                 *  Check role return true or false
                 */
                function checkRole(role, roles) {
                    // Check roles are not null
                    if (roles) {
                        var test = false;
                        angular.forEach(roles, function(v) {
                            if (v === role) test = true;
                        })
                        return test;
                    }
                    return false
                }
                /**
                 *  Check and eval a rule set
                 */
                function checkRule(rule) {
                    var perm = angular.isDefined(rule.can) ? Auth.user.can(rule.can) : true;
                    var role = angular.isDefined(rule.is) ? Auth.user.is(rule.is): true;
                    return eval(role + ' && ' + perm);
                }

Voila toute les clés pour filtrer toutes tes routes avec un systeme simple et complet d'acl.
Les droits et les groupe sont définis par mon api et récupéré à l'authentification.
Pour mon api j'utilise Laravel avec Kodeine\Acl pour la gestion des droits qui est tres simple tu trouveras un equivalemnt dans n'importe quel framework.
Si tu as besoin de plus de conseil pour mettre en place le filtrage des routes je reste a dispo.

yoann25
Auteur

Merci pour ta réponse, ca va m'aider a mettre en place toule ce système de check. Si j'ai un soucis je pense que je te demanderai.

Au passage une bonne solutionpour géré ton authentification https://github.com/sahat/satellizer très pratique si tu utilise des web tokens pour t'authentifier à ton api