MVC: создание пользовательского [AuthorizeAttribute], который принимает параметры? - PullRequest
0 голосов
/ 13 января 2011

Вот моя проблема:

Я авторизую пользователей на их роли, для 1 части.

 [Authorize(Roles = "Admin,...")]
 public class ModulesController : Controller {
    .....
 }

Контроллер модулей показывает список модулей, на которые пользователь имеет право.(Есть много модулей, но пользователь подключен только к части из них).Есть множество вещей, связанных с модулями, таких как вопросы, например ...

: подробное представление контроллера модулей.

    public ActionResult Details(int id) {
        var mod = (from p in _db.Modules
                   where p.Mod_ID == id
                   select p).First();

        return accessible(mod);
    }

    [NonAction]
    public ActionResult accessible(Module p) {
        if (MvcApplication.accessible(HttpContext.User, p.Mod_ID)) {
            return View(p);
        }
        ViewData["delError"] = "Not Accessible";
        return View("Error");
    }

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

Мне не нравится этот метод, так как я не всегда возвращаю Module в моем представлении, так что это имеет много методов перегрузкии для подстраниц модулей, таких как Вопросы, мне также нужно проверить, что человек просматривает вопросы модуля, к которому у него есть доступ.

Я хотел бы сделать это сАтрибут authorize, который будет принимать идентификатор из модуля, а также предоставит или запретит доступ к этому определенному модулю.Моя проблема в том, что когда пользователь запрашивает вопрос, мне нужно определить идентификатор модуля с помощью некоторого кода.Иногда ID модуля находится в URL, но это не всегда так.

как бы мне это сделать?было бы хорошо попробовать и использовать атрибут?или мне нужно сделать это по-другому?

Редактировать:

Я пытаюсь, что предлагается в ответах, но как я могу получить Routedata (например, ID)) в конструкторе контроллеров?

1 Ответ

2 голосов
/ 13 января 2011

См .: Атрибут авторизации Asp.net mvc, интегрированный с параметром

Действительно раздраженный, связанный поиск не улавливает эти вещи ...

...