BFr*_*ree 13 c# asp.net-mvc authorization iprincipal
这应该很简单,但在谷歌搜索之后我根本想不出来.这就是我想要的.我有一个我想要授权的自定义用户表(目前没有角色).为此,我必须实现我已经完成的自定义成员资格提供程序.我的问题是,如何设置自定义IPrincipal到HttpContext.Current.User?应该在哪里发生?假设我有以下设置:
public class CustomMembershipProvider : MembershipProvider
{
private IUserRepository _repository;
public CustomMembershipProvider(IUserRepository repository)
{
_repository = repository;
}
public override bool ValidateUser(string username, string password)
{
//check user repository
}
//additional methods omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个自定义用户类实现IPrincipal和IIdentity
public class CustomUser : IPrincipal
{
public CustomUser(string name, int userId, string additionalInfo)
{
Identity = new CustomIdentity(name, userId, additionalInfo);
}
public IIdentity Identity { get; private set; }
public bool IsInRole(string role)
{
return true;
}
}
public class CustomIdentity : IIdentity
{
public CustomIdentity(string name, int userId, string additionalInfo)
{
Name = name;
UserId = userId;
AdditionalInfo = additionalInfo;
}
public string Name { get; private set; }
public string AuthenticationType
{
get { return "CustomAuth"; }
}
public bool IsAuthenticated
{
get { return !String.IsNullOrEmpty(Name); }
}
public int UserId { get; private set; }
public string AdditionalInfo { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,将Context.User设置为此自定义用户的实例的正确位置在哪里?我需要自定义授权属性吗?如果是这样,那会是什么样子?
我建议为所有控制器使用自定义控制器基类
然后,在 中OnAuthorization,调用
protected override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
{
// Actual Authentication
HttpContext.User = user;
Thread.CurrentPrincipal = user;
base.OnAuthorization(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
我不完全确定如何调用成员资格提供程序,因为我正在手动执行此操作,但我认为您可以静态访问以Membership.Provider执行实际的对象构造。
我需要自定义授权属性吗?
不会。请注意身份验证和授权的区别:身份验证在系统中建立用户的身份。授权允许或拒绝特定请求。因此,AuthorizeAttribute还有一个Roles参数允许仅由某些用户调用操作。
| 归档时间: |
|
| 查看次数: |
6857 次 |
| 最近记录: |