2010-12-08 7 views
1

J'ai un site Web interne d'entreprise ASP.NET MVC.Comment implémenter la sécurité pour le site ASP.NET MVC pour refuser l'accès à un groupe particulier?

Condition (1): Lorsqu'une personne est sur le réseau, elle peut accéder à ce site SAUF un groupe AD (exemple: groupe AD_Sales).

Exigence (2): En outre, comme par exemple, si une personne qui a l'accès passe une URL (Ex: http://mysite/Home/Index/Product/Letter) à une personne du groupe de vente, il devrait toujours pas accès et besoin d'afficher un message personnalisé disant " Vous n'êtes pas autorisé à voir cette page ".

Si le scénario est similaire à l'accès à un groupe AD et refuse l'accès pour tous les autres, il est assez. Cela peut être fait à partir d'IIS. Je me demande comment faire cela.

Quelqu'un a implémenté la sécurité pour ce scénario?

J'apprécie votre temps et vos réponses.

Merci

+0

Une chose rapide: C'est sur le réseau et l'authentification Windows est utilisée pour identifier l'utilisateur. Pas d'authentification par formulaire. Donc il n'y a pas de concept de session – Rita

Répondre

3

Je suis sûr que cela fonctionnera pour vous ...

2 étapes ... La première chose que vous devez faire est dans votre Global.asax.cs essayer de mettre ce

protected void Application_AcquireRequestState(Object sender, EventArgs e) 
    { 
     //Context.Handler in this state, we can access Session. 
     if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState) 
     { 
      //Is it a session created in this request? 
      if (Session.IsNewSession) 
      { 
       //Am I already authenticated? 
       if (User.Identity.IsAuthenticated) 
       { 
        //if already authenticated, check if it is logon, if not, we just logout, 
        //else, we can continue the logon and reset the user identity. 
        string url = Request.Url.ToString(); 
        if (url.IndexOf("Account/LogOn") < 0) 
        { 
         FormsAuthentication.SignOut(); 
         Response.Redirect(Request.RawUrl); 
        } 
       } 
      } 
      else 
      { 
       //Am I already authenticated? 
       if (User.Identity.IsAuthenticated) 
       { 
        try 
        { 
         /// Here we try to get the current role of the user logged in from the session 
         SessionUser myRole = CurrentUser.GetRole(); 
         string[] strRole; 
         switch (myRole) 
         { 
          case Role.ADSales: 
           { 
            string[] Roles = { "ADSales" }; 
            strRole = Roles; 
           } 
           break; 
          case Role.DeptHead: 
           { 
            string[] Roles = { "DeptHead" }; 
            strRole = Roles; 
           } 
           break; 
          case Role.ProductionCrew: 
           { 
            string[] Roles = { "ProductionCrew" }; 
            strRole = Roles; 
           } 
           break; 
          case Role.Admin: 
           { 
            string[] Roles = { "Admin" }; 
            strRole = Roles; 
           } 
           break; 
          default: 
           throw new AuthenticationException(ErrorEnum.Impossible); 
          //break; 
         } 
         Context.User = new System.Security.Principal.GenericPrincipal(Context.User.Identity, strRole); 

        } 
        catch (Exception) 
        { 
         string url = Request.Url.ToString(); 
         if (url.IndexOf("Account/LogOn") < 0) 
         { 
          FormsAuthentication.SignOut(); 
          Response.Redirect(Request.RawUrl); 
         } 
        } 


       } 
      } 
     } 
    } 

suivant dans votre contrôleur ajoutez l'attribut

[Authorize(Roles = "ProductionCrew,DeptHead,Admin")] 
public ActionResult Letter() 
{ 
    Return View(); 
} 

Prenez note tha t Je n'ai pas inclus les ADSales dans les rôles, cela signifie que l'utilisateur qui a ce rôle ne peut pas accéder à la page Letter.

Espérons que cela aide. S'il vous plaît votez si cela vous a aidé et n'oubliez pas de le marquer comme la réponse si elle résout votre problème. Merci!

0

Vous devez activer l'authentification Windows dans le répertoire de votre application. Modifiez ensuite la liste de contrôle d'accès des fichiers/répertoire concernés pour refuser l'accès au groupe en question. Enfin, mappez l'erreur IIS 403 à votre méthode d'accès refusé.

Questions connexes