MVC3 вошел в систему Пользователь может видеть только собственные вещи, кроме администратора - PullRequest
2 голосов
/ 02 декабря 2011

Новичок в asp.net и mvc3. Я учусь, ставя перед собой задачи / разрабатывая приложение. Я отмечаю все таблицы записей, где пользователи взаимодействуют с ProviderUserKey. Теперь я хочу иметь возможность ограничить пользователей, вошедших в систему, чтобы иметь возможность редактировать или удалять только свои собственные записи, но администраторы могут редактировать или удалять любые. Я использовал scaffolding для генерации контроллеров, представлений и т. Д., Например, для кода для редактирования` // POST: / Post / Edit / 5

    [HttpPost]
    public ActionResult Edit(PJpost pjpost)
    {
        if (ModelState.IsValid)
        {
            db.Entry(pjpost).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(pjpost);
    }`

Любая помощь будет высоко оценена.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Если у вас есть общий метод / действие Edit и вы хотите сохранить его таким образом, я бы добавил в ваш контроллер метод, похожий на ValidateOwnership (record). Этот метод должен был бы проверить, совпадает ли идентификатор CurrentUser с идентификатором в записи, и если пользователь является членом определенной роли - это можно сделать с помощью класса RoleManager. Метод вернет истину / ложь. Когда вы подготовитесь, поместите вызов метода в ваш код после проверки ModelState. Это будет выглядеть так

[HttpPost]
public ActionResult Edit(PJpost pjpost)
{
    if (ModelState.IsValid)
    {
      if(IsOwnershipValid(pjpost){
          db.Entry(pjpost).State = EntityState.Modified;
          db.SaveChanges();
          return RedirectToAction("Index");
        }
       else {
           ModelState.AddModelError("ERROR","You're not allowed to do that");
           return View(pjpost);
        }
    }
    return View(pjpost);
}

РЕДАКТИРОВАТЬ: Таким образом, OwnershipValidation может выглядеть так:

public bool ValidateOwnership(Pjpost pjpost) { 
    if (pjpost.MemUID == Membership.GetUser().ProviderUserKey.ToString()) 
    { 
    return true; 
    } 
    else 
    { 
    return false; 
    } 
} 

Надеюсь, вы это имели в виду.

1 голос
/ 02 декабря 2011

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

код, стоящий за ним, будет выглядеть примерно так:

[Authorize(Roles="admin")]   
public ActionResult admin()
  { 
      //Action gives an admin rights since the user is in the admin role
  return View();     
  } 

[Authorize(Roles="manager")]   
public ActionResult manager()
  { //give a managers rights since user is im managers roles.
  return View();     
  } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...