Erlauben Sie Rollen nicht arbeiten, aber es Benutzern ermöglichen, die Arbeit im web.config
Ich umgesetzt asp.net die Mitgliedschaft für die Formularauthentifizierung. In der Regel für die Anmeldung es wird verwendet, Benutzername, aber ich änderte dies, um sich mit E-Mail-id. Das ist in Ordnung. Jetzt versuche ich den Zugang zu den Nutzern, die nicht in Admin Rolle. Ich erstellte web.config-Datei in diesen Ordner habe ich wie folgt geschrieben.
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*"/>
</authorization>
</system.web>
</configuration>
Sobald ich das getestet habe mit diesem ein, obwohl die Benutzer, die mit der admin Rolle ist nicht in der Lage, Zugang. Wenn er auf den link klickt, er unterzeichnet sich (wie der Benutzer nicht über die Berechtigung zum Zugriff auf die Seite). Für die Anzeige des Menüs bin ich mit web.sitemap - Datei. Es ist in Ordnung, die auf der Grundlage von Rollen.
Code im web.cofnig Dateien unter diesem Ordner korrekt sind, wie pro MSDN. Ich weiß nicht, warum es nicht funktioniert. Wenn wir das ändern membership controls Standard-login-Verhalten, dann ist jede Sache, die sollte sich darum kümmern zu Rollen?
Viele Fragen, die ähnlich waren gefunden bei stackoverflow sowie in einigen anderen Seiten auch. Aber nichts gibt mir die Lösung. Was ist falsch in diesem? Müssen schreiben von benutzerdefiniertem code zu behandeln?
Sie erlauben Benutzern, die ich geschrieben wie unten. Es arbeitet perfekte
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow users="[email protected]" />
<deny users="*"/>
</authorization>
</system.web>
</configuration>
Warum es nicht funktioniert, nur für die Rollen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
RoleProvider
verwendenGetRolesForUser
Methode ruft autorisierten Rollen für einen Benutzer.In Ihrem Fall, Ihr
RoleProvider
geht[email protected]
als Benutzername. Als Ergebnis, es ist kein Benutzername mit[email protected]
in der Tabelle User.Hier sind Lösungen -
1) Der einfachste Weg, um das problem zu lösen, ist das kopieren E-Mail Spalte Mitgliedschaften Tabelle Benutzername Spalte Benutzer Tabelle.
2) Der harte Weg erstellen Sie benutzerdefinierte
RoleProvider
und überschreibenGetRolesForUser
Methode.3) Wenn Sie geschehen, zu verwenden
legacy Membership Provider
statt Universal-Mitgliedschaftsanbieter, die Sie ändern können aspnet_UsersInRoles_GetRolesForUser.Ich verwendet einen anderen Ansatz. Ich habe nicht geändert, das login mit emailid. Ich bin die Protokollierung mit E-Mail nur. Aber das problem kommt, weil standardmäßig, Rolle Anbieter überprüfen, mit Benutzernamen statt E-Mail. Für die, die ich geändert
login
Verhalten. Also, Wann immer Benutzer-login, die ich verwendet, um das login-Steuerelement-Wert, wie unten.Schreibe ich diesen code in die Login-Seite. So nach dem erfolgreichen login, das loginview wird entsprechend aktualisiert. Nun, es funktioniert perfekt.
Die Antwort Gewinnen auch gut. Wenn wir zeigen wollen, nur E-Mail-id in
LoginView
anstelle von Benutzer name haben wir diese Methode implementieren.Bekommen den Benutzernamen per E-Mail können wir uns schreiben, wie