Formulaire d'Authentification : Rôles (MVC 4) C#

Je suis en train de mettre en œuvre l'Authentification de Formulaires dans mon Application. J'ai des exemples divers et regarda les échantillons et les questions fournies dans ce forum et ASP.net MVC, mais je ne peux pas le faire fonctionner.

J'ai réussi à authentifier mes utilisateurs, mais les rôles ne semble pas fonctionner 🙁

J'ai de l'installation de mon site Web.Config comme suit :

<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>

Dans mon Contrôleur, je mis la page Index de AllowAnonymous et ensuite de vérifier si l'utilisateur est authentifié. Si non, alors rediriger vers la page de connexion..

[AllowAnonymous]
    public ActionResult Index(string sortOrder, string searchString,string currentFilter, int? page)
    {
        if (!Request.IsAuthenticated)
        {

            return RedirectToAction("Login", "Account");

        }
//Find all the employees
        var employees = from s in db.Employees
                       select s;
//Pass employees to the view (All works fine)
return View(employees.ToPagedList(pageNumber, pageSize));
}

Tout cela fonctionne 100%

Mon code de Connexion ressemble à ceci :

 [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(User user, string returnUrl)
    {
        var myUser = db.Users.Where(b => b.UserName == user.UserName).FirstOrDefault();
        if(myUser != null)
        {
            if(myUser.Password==user.Password)
            {
                //These session values are just for demo purpose to show the user details on master page
                //Session["User"] = user;
                ICollection<UserAccessLevel> levels = db.UserAccessLevels.Where(b => b.UserId == myUser.UserId).ToList();
                //Session["levels"] = levels;

                //Let us now set the authentication cookie so that we can use that later.
                FormsAuthentication.SetAuthCookie(user.UserName, false);

                return RedirectToAction("Index","Employee");
            }
        }
        ViewBag.Message = "Invalid User name or Password.";
        return View(user);
    }

J'ai aussi le code suivant dans le Global.asax fichier :

 protected void FormsAuthentication_OnAuthenticate(Object sender, FormsAuthenticationEventArgs e)
    {
        if (FormsAuthentication.CookiesSupported == true)
        {
            if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
            {
                try
                {
                    //let us take out the username now                
                    string username = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value).Name;
                    string roles = string.Empty;

                    using (TrainingContext entities = new TrainingContext())
                    {
                        User user = entities.Users.SingleOrDefault(u => u.UserName == username);

                        roles = "admin";//user.Roles;
                    }
                    //Let us set the Pricipal with our user specific details
                    e.User = new System.Security.Principal.GenericPrincipal(
                       new System.Security.Principal.GenericIdentity(username, "Forms"), roles.Split(';'));
                }
                catch (Exception)
                {
                    //somehting went wrong
                }
            }
        }
    }

Lorsque je me connecte à mon FormsAuthentication_OnAuthenticate exécute et tout semble bon. Mon Utilisateur est définie et mes rôles dans la session est aussi là...

Mais quand je clique sur les détails de mon Employé ou de l'écran d'Index, il me ramène à l'écran de login (j'attends qu'il me prennent pour les détails de l'employé, j'ai cliqué parce que je suis connecté et je suis le programme d'installation en tant qu'administrateur de rôle)

S'il vous plaît pouvez-vous m'aider pour essayer de gagner le problème. Je me suis assis pendant plus de 18 heures déjà essayer de le comprendre.

Je l'ai déjà regardé ces solutions, et comme vous pouvez le voir, la plupart de mon code vient de là...
codeproject.com/Articles/578374/AplusBeginner-27splusTutorialplusonplusCustomplusF
codeproject.com/Articles/342061/Understanding-ASP-NET-Roles-and-Membership-A-Begin
codeproject.com/Articles/408306/Understanding-and-Implementing-ASP-NET-Custom-Form

dans le cas où vous avez besoin de plus de détails sur mon code, vous pouvez également le télécharger à partir de GitHub
https://github.com/Ruandv/Training/tree/FormsAuthentication

Je vous remercie de votre aide.

Vous pouvez poster quel que vous avez dans votre Autoriser l'attribut de classe?
Je n'ai pas coutume d'Autoriser l'attribut de la classe. Je suis en train de l'utilisation de la norme.

OriginalL'auteur Gremlin1708 | 2013-12-09