Vous ne serez pas en mesure de le faire avec la valeur par défaut AuthorizeAttribute. Vous devrez étendre AuthorizeAttribute avec une classe personnalisée qui ajoute le comportement de l'utilisateur. Généralement, il utilise des utilisateurs nommés, mais vous pouvez fournir une alternative. Normalement, si vous fournissez à la fois des utilisateurs et des rôles, l'utilisateur doit figurer dans la liste des utilisateurs et avoir l'un des rôles indiqués.
public class UserOrRoleAuthorizeAttribute : AuthorizeAttribute
{
public int? SuperUserID { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (base.AuthorizeCore(httpContext))
{
var userid == ...get id of current user from db...
return userid == this.SuperUserID;
}
return false;
}
}
Utilisé comme:
[UserOrRoleAuthorize(Roles="Admin",SuperUserID=15)]
public ActionResult SomeAction() ...
Notez que vous pouvez également ajouter une certaine façon de specifing où chercher l'id pour cette action, .ie,
Table="Admins",Column="AdminID",MatchProperty="Company",MatchParameter="company"
puis mettre du code dans l'attribut pour rechercher la valeur dans la table et la colonne de propriétés et la comparer à l'entrée RouteValue spécifiée au lieu de la coder en dur.
le superUserID dépendra de la valeur des paramètres affichés. – zsharp
Ensuite, ajoutez quelque chose comme les propriétés que j'ai énumérées dans l'alternative pour spécifier quel paramètre (s) dans les valeurs de route à utiliser pour rechercher l'utilisateur correct. Ce sont les clés de RouteValueDictionary. Concevez la logique dans votre attribut personnalisé pour extraire l'ID de la table appropriée et le comparer à l'utilisateur actuel. – tvanfosson
où est exactement le RouteValueDicitonary? – zsharp