Conception d'un site assez compliqué avec beaucoup d'Ajax en cours d'exécution sur une seule page. J'ai atteint le point où certains utilisateurs ont besoin d'une autorisation spécifique de faire des choses et d'autres doivent être arrêtées de l'action. J'ai mis en place des rôles utilisateur dans ma base de données et tout va bien fonctionner, mais je me demande s'il y a une méthode plus facile / plus sûre pour moi de stocker chaque autorisation. P>
Actuellement, lorsqu'un utilisateur se connecte dans ses autorisations spécifiques est saisi à partir de la DB et chargée dans un tableau de session. Pour vérifier si l'utilisateur a la permission, je vérifie simplement pour voir si l'autorisation est contenue dans la matrice. Cela semble léthargique et presque comme il me manque une meilleure solution. P>
En outre, les sessions peuvent apparemment être éditées par l'utilisateur ... y a-t-il une méthode plus sûre? P>
J'ai pensé à exécuter une requête pour chaque chèque, mais cela pourrait augmenter considérablement le temps de charge pour une simple demande Ajax. P>
Je suis ouvert à toutes les idées. Merci. P>
3 Réponses :
Semble ok pour moi! Vous pouvez consulter certains logiciels pour améliorer votre session Talhe Peformance. P>
Querifier la DB chaque fois n'est pas aussi mauvais que cela sonne! Tout d'abord, vous devez probablement se connecter à la DB quand même, deuxièmement, si vous avez interrogé les autorisations des utilisateurs lorsqu'ils ont signé, alors que toutes les lignes pertinentes sont assises dans le tampon et qu'aucun IO n'est requis, troisièmement une requête pour une seule autorisation pour Un seul utilisateur va être beaucoup plus léger qu'une requête pour tous les autorisations pour un utilisateur. P>
Tout d'abord, l'utilisateur ne peut pas modifier les variables de session. La seule chose qui est enregistrée sur la machine de l'utilisateur est un identifiant de session. Cet identifiant est ensuite utilisé par le serveur pour saisir des paires de clé / de valeur stockées uniquement sur le serveur. Du point de vue du client, il est impossible de changer de valeurs sur un caprice.
Deuxièmement, je ne m'inquiéterais pas trop sur une connexion de base de données. Évitez de vous répéter, mais ne vous inquiétez pas trop de la première connexion. P>
Enfin, ma façon préférée de faire plusieurs autorisations sans créer de rôles est d'utiliser des mathématiques binaires. Certaines personnes comme ça, certaines personnes ne le font pas, mais je le trouve utile. P>
Pour utiliser cette méthode, imagerie que nous définissons les valeurs suivantes: p>
// If both EDIT_SOMETHING and ADMIN_STUFF are tasks that an admin // can perform, we can combine them easily // IS_FULL_ADMIN = CAN_EDIT_SOMETHING | CAN_DO_ADMIN_STUFF // We can then use this value exactly as we do any other permission // PERMISSIONS = IS_FULL_ADMIN | CAN_SEE_SOMETHING ELSE
Merci d'avoir expliqué le binaire, je voulais aller avec quelque chose comme ça lors de la première conception de rôles. J'ai fini par aller avec 2 tables DB contenant des rôles utilisateur et des autorisations Indv, ce qui a plus de sens à me lire pour moi. Je pourrais aussi jurer que j'ai vu quelque part qu'il était possible de tirer vos données de session et de le modifier, bien que difficile. Peut être pas.
@Capt Otis, comme je l'ai dit cela fonctionne dans certains scénarios et non dans d'autres. Vous connaissez votre système mieux que moi. En ce qui concerne les sessions, c'est ainsi que cela fonctionne dans PHP, mais vous devriez vérifier le système que vous utilisez. Utilisez Fiddler ou Wireshark pour examiner le trafic et voir ce que votre utilisateur voit réellement. Si tout ce qui est passé, un identifiant (qui ne change pas lorsque les valeurs changent), alors vous allez bien. Si vous remarquez plus de valeurs qu'un ID ou si vous remarquez que les informations de session changent lorsque les valeurs de session changent, vous avez des problèmes et vous avez mieux l'air de près vos sessions :)
Votre explication du modèle semble un peu confus. La permission est le produit de l'autorisation de sujet et de l'autorisation d'objet. Conservez-vous vraiment ces produits pour chaque combinaison de sujet et d'objet? C'est une solution très inefficace et très difficile à gérer. P>
En outre, les sessions peuvent apparemment être éditées par l'utilisateur p> blockQuote>
wtf ????? !!!! p>
Les données de session ne doivent jamais être modifiées que par les méthodes que vous définissez dans votre code - si les utilisateurs sont en mesure de modifier une partie des données de session de quelque manière que ce soit, c'est le premier problème que vous devez adresser - jusqu'à ce que vous fassiez Il sera pratiquement impossible de s'appuyer sur n'importe quelle partie de votre méthode d'authentification / d'autorisation, sauf si vous déplacez complètement l'authentification hors du domaine de votre code d'application (BTW: Ce n'est pas la bonne façon de résoudre le problème). P>
rechercher certainement un très grand tableau (pas sûr du point d'arrêt réel - mais dans la région de N = 1000 - mais il y a beaucoup de variables qui affectant cela) peut être significativement plus lente que de récupérer les résultats d'une base de données. P >
C'est difficile de dire ce que vous faites mal sans comprendre comment fonctionne votre système actuel. Est-ce une de ces ? P>