Создание пользовательских AuthorizeAttribute так:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
private UnitOfWork _unitOfWork = new UnitOfWork();
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = false;
var username = httpContext.User.Identity.Name;
// Some code to find the user in the database...
var user = _unitOfWork.UserRepository.Find(username);
if(user != null)
{
// Check if there are Details for the user in the database
if(user.HasDetails)
{
isAuthorized = true;
}
}
return isAuthorized;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (!AuthorizeCore(filterContext.HttpContext))
{
// If not authorized, redirect to the Details action
// of the Account controller...
var action = filterContext.RouteData.Values["action"];
if(filterContext.Controller is AccountController
&& action.Equals("Details"))
{
// Do nothing
}
else
{
filterContext.Result = new RedirectToRouteResult(
new System.Web.Routing.RouteValueDictionary {
{"controller", "Account"}, {"action", "Details"}
}
);
}
}
}
}
Затем, вы можете использовать его в контроллерах как это:
[MyAuthorize]
public class HomeController : Controller
{
}
Или ты может зарегистрировать его как глобальный фильтр действий в файле Global.asax следующим образом:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MyAuthorizeAttribute());
}
Создать пользовательский атрибут авторизации, в котором вы проверяете, имеются ли детали для пользователя, сохраненного в базе данных, если нет, перенаправляйте пользователя на представление «Введите ваши данные». – ataravati
Можете ли вы опубликовать ответ на этот вопрос, с некоторыми примерами легкого кода? Я надеялся, что есть способ направить их в View on Authorization (как и в случае с Forms Auth). Мне также нужно будет знать, как получить их данные из окна auth, если я должен реализовать пользовательский атрибут. –