2016-05-20 5 views
1

У меня есть отдельная база данных, заполненная сотрудниками, каждая с уникальным адресом электронной почты. Создаваемый мной веб-сайт, сотрудники могут регистрировать учетную запись, и если у них есть соответствующий адрес электронной почты, я бы хотел, чтобы они увидели их контактную информацию и, если возможно, отредактировали ее.В ASP MVC Identity, каков наилучший способ ограничения доступа на основе критериев?

Вот такой код, который я смог использовать для этого.

[AllowAnonymous] 
    // GET: Contacts/Details/ 
    public ActionResult Details(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     Contact contact = db.Contacts.Find(id); 
     if(User.IsInRole("Admin")||(User.Identity.GetUserName()==contact.Email)) 
     { 
      return View(contact); 
     } 

     if (contact == null) 
     { 
      return HttpNotFound(); 
     } 

     return RedirectToAction("AccessDenied","Error"); 

    } 

В идеале я хотел бы удалить [AllowAnonymous] и иметь что-то вроде

[Authorize(Roles="Admin",Users=User.Identity.GetUserName())] 

, но это тянет ошибку:

"User.Identity.GetUserName() an object reference is required".

Любые suggesions?

+0

Что вы пытаетесь достичь с помощью «Users = User.Identity.GetUserName()»? Изменить: О, я вижу сейчас. Возможно, вы сможете создать фильтр действий. Это довольно безболезненный процесс. –

+0

Как вы создаете претензии? Используете ли вы по умолчанию коды ASP.Net Identity с ASP.Net MVC? – Win

ответ

1

Вы можете создать новый класс атрибутов, который должен наследоваться от класса атрибута Authorize. Вы можете передать свой желаемый параметр в новый класс атрибутов и соответственно сыграть, переопределив метод OnAuthorization.

+0

Спасибо, это сработало красиво – xphacterzero

0

Авторизованный конструктор атрибутов принимает только постоянные значения, вы не можете использовать его динамически для каждого пользователя. если вы хотите, чтобы ваш конкретный тип пользователей мог иметь доступ только к этому методу, создайте для них роль и используйте его.

[Authorize(Roles="Admin,SpecialUsers")]