2009-09-02 7 views
0

Dans ma future application Web, il y aurait beaucoup de rôles utilisateur. Selon le rôle de l'utilisateur, webapp devrait restreindre l'accès des utilisateurs à certaines informations. Je dois implémenter des fonctionnalités suivantes:Solution complexe pour maintenir la sécurité basée sur les rôles

  • selon le rôle, l'utilisateur doit voir que les colonnes et les lignes (dans la grille de données) qui sont disponibles pour le rôle actuel et l'utilisateur
  • selon le rôle, l'utilisateur doit consulter la page en lecture seule ou en mode modifiable
  • selon le rôle, l'utilisateur doit avoir visible/caché des contrôles sur une page web

dans mes applications précédentes (qui étaient assez simples) ce problème a été résolu à l'aide de nombreux opérateurs de conditionals dans les fichiers codeBehind et dans les fichiers de balisage aussi. Il était assez difficile de maintenir un tel code. Je me demande s'il existe une solution complexe pour maintenir la sécurité basée sur les rôles pour tous les niveaux d'application (données, logique, vue) sans perturber le code avec les IF.

ps à la fois, des solutions pour les plates-formes Java et .net sont intéressants

Répondre

0

En ce qui concerne le point 1: Vous pouvez mettre en œuvre que par encapsulation votre accès aux données et filtrage des lignes chargées de faire correspondre le compte de l'utilisateur actuel/le rôle de l'utilisateur actuel. J'ai implémenté ceci et un mécanisme similaire pour empêcher l'accès en écriture aux lignes d'autres utilisateurs dans ma couche de données, ce qui évite d'avoir à écrire des contrôles de sécurité d'accès en écriture dans la couche de gestion.

+0

Et comment l'avez-vous implémenté dans DAO? pas comme:? if (userRole == 'admin') {} if (userRole == 'role1') {} .. if (userRole == 'rôle') {} il reste encore un problème de rendu de la vue en fonction sur le rôle – kilonet

+0

Ma couche de données est basée sur LinqToSQL et pour les lectures, j'ajoute simplement une clause where pour limiter les résultats aux lignes appartenant à cet utilisateur particulier. Les écritures sont un peu plus compliquées et mon approche ne fonctionnerait pas sans Linq, mais peut-être que vous pourriez approcher cela en ajoutant une clause where supplémentaire à vos requêtes de mise à jour/suppression ainsi que pour limiter les opérations de base de données par propriétaire de ligne. –

Questions connexes