Рекомендации по использованию учетной записи ASP.NET MVC?

Я смотрю на контроллер учетной записи MVC, и похоже, это из веб-форм ASP.NET. Есть ли хорошая справочная информация о том, как ее использовать?

Можете ли вы сопоставить его с таблицей базы данных пользователей или лучше катить свое собственное управление пользователями?

Как вы можете использовать его в MVC, чтобы ограничить, какие страницы, которые мог зарегистрировать пользователь? Вам нужно сворачивать все это самостоятельно?

Какие ресурсы в Интернете могут помочь с пониманием членства в ASP.NET?

Ответ 1

Я смотрю на учетную запись MVC контроллер... кажется, от asp.net?

Скотт Гатри объясняет это довольно хорошо в своей записи в блоге о ASP.NET MVC Preview 4. Он в основном говорит, что Контроллер учетной записи из образца MVC использует поставщика членства ASP.NET, поэтому вы можете использовать любой из них. (Я думаю, вы можете узнать больше о провайдерах членства ASP.NET в Интернете.) Если вы не хотите внедрять/использовать один из них, возможно, лучшим вариантом будет изменение приложения для использования вашего собственного управления пользователями.

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

Вы можете добавить атрибут Authorize к классу контроллера или методу действий. (Тот же источник, как указано выше.)

// Only logged in users can access this controller.
[Authorize]
public class SomeController : Controller
{
    #region Not really important for this example. :]
    // Maybe rather use a BLL service here instead of the repository from the DAL, but this example is already more verbose than required.
    private IStuffRepository stuffRepository;

    public SomeController(IStuffRepository stuffRepository)
    {
        if (null == stuffRepository)
        {
            throw new ArgumentNullException("stuffRepository");
        }

        this.stuffRepository = stuffRepository;
    }
    #endregion

    // The authorize attribute is inherited - only logged in users can use the index action.
    public ActionResult Index()
    {
        return View();
    }

    // Moderators can flag stuff.
    [Authorize(Roles="Moderator")]
    public ActionResult Flag(int id)
    {
        this.stuffRepository.Flag(id);
        return RedirectToAction("Index");
    }

    // Admins ans SysOps can delete stuff.
    [Authorize(Roles="Admin,SysOp")]
    public ActionResult Delete(int id)
    {
        this.stuffRepository.Delete(id);
        return RedirectToAction("Index");
    }

    // Only joed can change the objects stuff. ;)
    // (This is probably bullshit, of course, but I could not make any better example. I blame the fact it is late at night. :))
    [Authorize(Users="COMPANY\\joed")]
    public ActionResult ChangeId(int oldId, int newId)
    {
        this.stuffRepository.ChangeId(oldId, newId);
        return RedirectToAction("Index");
    }
}