2009-04-24 8 views
0

Je travaille sur un forum Web, en quelque sorte, ou en essayant d'en concevoir un en utilisant ASP.NET MVC. Cependant, le contenu basé sur le rôle de l'utilisateur est un défi plus important que la simple utilisation d'un attribut [Authorize], car la sortie donnée diffère en fonction des rôles d'accès.Contenu basé sur l'autorisation de la couche de données

Ainsi, alors qu'un membre utilisateur dans le rôle modérateurs devrait être capable de voir les sous-forums secrets, une partie utilisateur du rôle membre normal ne devrait pas. Pour cela, j'ai besoin de concevoir ma couche de données correctement, mais cela me bourdonne, car je veux vraiment suivre le modèle MVC et appliquer le filtrage dans le contrôleur, mais le problème vient du contenu imbriqué et des relations. Parce que si le Category.Forum dans IList ne doit pas être visible pour un utilisateur donné, alors je devrais utiliser une requête de base de données unique pour extraire Category.Forum, alors qu'une couche de données appropriée essaierait de la diviser en deux modules DA, CategoryDA et ForumDA.

Une autre chose est l'ensemble de l'application des rôles d'utilisateurs à travers le système d'adhésion, car un utilisateur peut avoir plusieurs rôles.

C'est un peu difficile à expliquer, mais je suppose que beaucoup de gens connaissent les tableaux d'affichage typiques, et pourraient me donner une idée de la façon de concevoir ma couche d'accès aux données.

Merci :)

Répondre

0

Il est probablement plus facile de créer simplement votre propre filtre d'action pour faire l'autorisation au lieu d'utiliser l'attribut de base [Authorize]. Comme ceci:

public class CheckPermission : ActionFilterAttribute 
{ 
    public override void OnActionExecuting 
     (ActionExecutingContext filterContext) 
    { 
     try 
     { 
      // do your security checks here 
      // if NOT allow, throw NOTAUTHORIZED exception 
     } 
     catch (Exception ex) 
     { 
      // handle how to redirect - auto logout, etc 
     } 
     finally 
     { 
      base.OnActionExecuting(filterContext); 
     } 
    } 
} 
Questions connexes