Обновление
Пожалуйста, смотрите этот ответ об использовании утверждений ...
В контроллере вы можете получить текущего пользователя, как этот:
using Microsoft.AspNet.Identity.Owin;
public class MyController : Controller
{
// this code will return 0 if user is not authenticated
protected long GetUserId()
{
// note: I have changed the default UserId type from Guid to long
return User.Identity.GetUserId<long>();
/*
* use this if you are using Guid UserIds (which is the default)
* return User.Identity.GetUserId();
*/
}
См. это , если вы хотите узнать, как изменить тип UserId
.
Если у вас есть доступ к HttpContext
, вы можете получить пользователя следующим образом:
// note that I have changed UserId from Guid to long
HttpContext.Current.User.Identity.GetUserId<long>()
Если вы хотите, чтобы ApplicationUser использовал это ( больше информацииздесь ):
// this is how you get user manager from OwinContext
var userManager = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
// Get ApplicationUser from UserManager
ApplicationUser user = UserManager.FindById(User.Identity.GetUserId());
Как получить доступ к текущему пользователю, чтобы авторизовать его для определенной функциональности на бизнес-уровне?
Если вам нужночтобы получить доступ к текущему пользователю в службе, вы можете пропустить его через или ввести его.Используя ninject , вы можете вставить UserId
в сервис:
kernel.Bind<MyService>().ToConstructor(ctorArg => new MyService(
HttpContext.Current.User.Identity.GetUserId<long>()).InRequestScope();
И вот как класс MyService
выглядит следующим образом:
public class MyService
{
private readonly long _userId;
public MyService(long userId)
{
// this service always has access to current user (if logged in)
_userId = userId;
}
// more code...
Я не уверен, каков процесс вашей авторизации ... ASP.NET Identity , уже выполняет задачу авторизации для вас.Это реализовано в ApplicationUserManager
и ApplicationSignInManager
, которые поставляются с шаблоном ASP.NET MVC по умолчанию.Вы можете использовать атрибут [Authorize]
в своем действии / классе для предотвращения несанкционированного доступа:
[Authorize] // <-- restricts all action methods of the class, unless marked [AllowAnonymous]
public class MyController : Controller
{
[HttpPost]
[Authorize] // <-- restricts this particular action method
public ActionResult MyAction(long id)
{
// do some action which requires authorization
}
Что касается слоев DDD, посмотрите на эту эту ссылку , которая объясняет службы, которыепринадлежат каждому слою.