Formular-Authentifizierung : Rollen (MVC 4), C#

Bin ich versucht zu implementieren der Formularauthentifizierung in meiner Anwendung. Ich verschiedene Beispiele und sah auf die Beispiele und Fragen in diesem forum und ASP.net MVC-aber ich kann einfach nicht damit es funktioniert.

Verwalte ich meine Benutzer-Authentifizierung, aber die Rollen nicht zu funktionieren scheint 🙁

Ich habe meine setup-Web.Config wie folgt :

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

In meinem Controller ich habe die Index-Seite zu AllowAnonymous und dann zu überprüfen, wenn der Benutzer authentifiziert ist. Wenn nicht dann umleiten auf die login-Seite..

[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));
}

Dies ist alles 100% funktioniert

Meine Login-code sieht wie folgt aus :

 [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);
    }

Ich habe auch folgenden code in die Global.asax-Datei :

 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
                }
            }
        }
    }

Wenn ich log in meinem FormsAuthentication_OnAuthenticate führt und alles sieht gut aus. Meine Benutzer und meine Rollen in der Sitzung ist auch da...

Aber wenn ich auf die details meiner Mitarbeiter/- Index-Bildschirm-es bringt mich zurück zu dem login-Bildschirm (ich erwarte, dass es mich zu nehmen, um die details der Mitarbeiter klickte ich, weil ich angemeldet bin, und ich bin das setup als admin-Rolle)

Bitte können Sie mir helfen, zu versuchen und zu das problem. Ich saß mehr als 18 Stunden bereits versucht, um dies herauszufinden.

Ich sah schon an diesen Lösungen und wie man sehen kann ist das meiste von meinem code stammt von dort...
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

in Fall müssen Sie mehr detail über meinen code, den Sie können es sich auch herunterladen von GitHub
https://github.com/Ruandv/Training/tree/FormsAuthentication

Ich schätzen Sie Ihre Hilfe.

  • Können Sie posten, was Sie haben in Ihre Autorisierung Attribut der Klasse?
  • Ich habe eine benutzerdefinierte Autorisieren Attribut-Klasse. Ich mache Gebrauch von der standard.
InformationsquelleAutor Gremlin1708 | 2013-12-09
Schreibe einen Kommentar