Sé que esta es una publicación anterior, pero pensé que compartiría mi experiencia ya que acabo de pasar por esto. No quería usar web.config. Estaba buscando una forma de crear un atributo para formularios web similar a la implementación de MVC. Encontré una publicación por Deran Schilling que utilicé como base para la porción del atributo.
creé una costumbre IPrincipal
interface IMyPrincipal : IPrincipal
{
string MyId { get; }
string OrgCode { get; }
string Email { get; }
}
y el director
public class MyPrincipal : IMyPrincipal
{
IIdentity identity;
private List<string> roles;
private string email;
private string myId;
private string orgCode;
public MyPrincipal(IIdentity identity, List<string> roles, string myId, string orgCode, string email)
{
this.identity = identity;
this.roles = roles;
this.myId = myId;
this.orgCode = orgCode;
this.email = email;
}
public IIdentity Identity
{
get { return identity; }
}
public bool IsInRole(string role)
{
return roles.Contains(role);
}
public string Email
{
get { return email; }
}
public string MyId
{
get { return myId; }
}
public string OrgCode
{
get { return orgCode; }
}
}
y creó un atributo para el uso en la página
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class AdminAuthorizationAttribute : Attribute
{
public AdminAuthorizationAttribute()
{
var user = (MyPrincipal)HttpContext.Current.User;
if (user.IsInRole("MyAdmin"))
return;
throw new AccessDeniedException();
}
}
y crearon algunas excepciones personalizadas
public class AccessDeniedException : BaseHttpException
{
public AccessDeniedException() : base((int)HttpStatusCode.Unauthorized, "User not authorized.") { }
}
public class BaseHttpException : HttpException
{
public BaseHttpException(int httpCode, string message) : base(httpCode, message) { }
}
y ahora puedo aplicar el atributo para el uso en una página determinada
[AdminAuthorization]
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
bien Tengo que. Pero, ¿hay alguna manera de restringir el acceso a un nivel de método específico similar a cómo puede hacerlo con MVC? –
@Blair Jones, tengo que hacer una comprobación como 'if (User.IsInRole (" somerole "))' dentro del método, me temo. –
ok gracias ... eso es a lo que le tenía miedo :( –