Вопрос по мелкозернистой авторизации и MVC2 - PullRequest
0 голосов
/ 29 июля 2010

Фон: совершенно новый для MVC2.Имеет опыт работы с C #, но ограниченный опыт работы в Интернете.

Мне нужен более точный доступ, чем просто назначение роли пользователю.Пользователь может иметь роль в 0+ баллов в дереве.

/
  /Europe
    /England
    /France
  /USA

Например, пользователь может быть модератором всех форумов в разделе "Европа" и иметь доступ к публикации новостей во Франции.

Два примера контроллеров имеют следующие действия:

ForumController:

public ActionResult DeletePost(int id) { ... }

NewsController:

[HttpPost]
public ActionResult Post(int treeID, ...) { ... }

Как мне подходить к этому?Из того, что я получаю, Membership + RoleProvider не может сделать этот уровень детального контроля.Ранее я написал пользовательскую систему user / role / auth, которая поддерживала все это, но она была несовместима со «стандартными» элементами управления, такими как LoginView.

Целью было бы иметь роли, обеспечивающие доступ, например, так:

NewsAdmin

  • Добавить новость

  • Редактировать новость

  • Удалить новость

NewsPoster

  • Добавить новость

Следовательно, действие Post для контроллера новостей должно проверять: имеет ли пользователь "Добавить новость" -доступгде он пытается опубликовать сообщение?

Я бы действительно хотел как-то указать это с помощью атрибутов, чтобы фактический код действия мог быть чище и просто предполагать, что у вызывающей стороны есть допустимый доступ.

Надеюсь, чтовопрос имеет смысл, и я могу получить некоторые указания о том, где читать.

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

1 Ответ

0 голосов
/ 29 июля 2010

Я думаю, вы слишком быстры, чтобы уволить поставщика ролей.Если бы у пользователя была роль с именем NewsAdmin_Europe_AddNews, которая бы в значительной степени ответила на вопрос, не так ли?

После того как ваша схема аутентификации работает с поставщиком ролей, вам необходимо связать ее с MVC.Подтип AuthorizeAttribute и переопределение AuthorizeCore. Предупреждение. Ваш код должен быть поточно-ориентированным и повторно входящим. Вызвать base.AuthorizeCore, а затем протестировать для конкретной роли на основе URI / запроса (вы не получите значения маршрута, посколькуобслуживается из кеша, минуя MVC вообще).

Это некоторая работа, но в конечном итоге она будет более безопасной, чем попытка заново изобрести членство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...