Ich habe gerade eine benutzerdefinierte Autorisierungsmethode erstellt, damit ein Benutzer auf der von mir erstellten Website nur seine Ansicht sehen kann.
public class UserAuthorize : AuthorizeAttribute
{
public string Username { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);
if (!authorized)
{
return false;
}
string username = httpContext.User.Identity.Name;
if(new RolesBL().IsUserInRole(username, 1))//1 is Admin
{
return true;
}
return Username.Equals(username);
}
}
Ich habe Probleme, die Daten vom Controller an diese Methode weiterzuleiten.
[UserAuthorize(Username = username)]
public ActionResult Details(string username)
{
User u = new UsersBL().GetUser(username);
return View(u);
}
Wie kann ich den Benutzernamen im Parameter der Ansicht auch an die Authorize-Methode übergeben?
Danke und Grüße
2 Antworten
Die Argumente in einer [Attribute]
-Deklaration werden alle zur Kompilierungszeit definiert und müssen daher Konstanten sein. Sie können den Laufzeitwert eines Aktionsparameters nicht "übergeben".
Außerdem wird das Attribut vor dem Aufrufen der Aktionsmethode verwendet (um zu bestimmen, ob die Aktion aufgerufen werden kann ), sodass dieser Parameter nicht einmal instanziiert wird.
Möglicherweise können Sie jedoch auf den Wert username
innerhalb der Attributimplementierung UserAuthorize
zugreifen, da Sie mit dem Parameter httpContext
auf die Anforderungsdetails zugreifen können, die vermutlich den Benutzernamen als Teil von enthalten Abfragezeichenfolge.
Dies ist kein Fall, in dem die Verwendung einer Autorisierung sinnvoll ist. Sie sollten stattdessen verhindern, dass der Benutzer ein Argument übergeben kann, um den Benutzer zu überschreiben, als den er angemeldet ist.
public ActionResult Details()
{
User u = new UsersBL().GetUser(this.User.Identity.Name);
return View(u);
}
Ihre Abfrage fungiert dann als Filter, um sicherzustellen, dass nur die angemeldeten Benutzerinformationen angezeigt werden.
Wenn Sie einen Superuser benötigen, um jeden Benutzer anzeigen / bearbeiten zu können, müssen Sie eine Rolle verwenden, um sicherzustellen, dass nur Benutzer in dieser Rolle andere Benutzer bearbeiten können. In diesem Fall reicht jedoch der Standard AuthorizeAttribute
aus.
public ActionResult Details()
{
User u = new UsersBL().GetUser(this.User.Identity.Name);
return View(u);
}
[Authorize(Roles = "SuperUser")]
public ActionResult Details(string username)
{
User u = new UsersBL().GetUser(username);
return View(u);
}
Neue Fragen
asp.net-mvc
Das ASP.NET MVC Framework ist ein Open Source-Webanwendungsframework und -Tool, das eine Version des MVC-Musters (Model View Controller) implementiert, das auf Webanwendungen zugeschnitten ist und auf einer ASP.NET-Technologiegrundlage basiert.