MVC: criando um [AuthorizeAttribute] personalizado que aceita parâmetros?

Aqui está o meu problema:

Estou autorizando os usuários em suas funções, por 1 parte.

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

o controlador Modules mostra uma lista de módulos aos quais o usuário tem direito. (existem muitos módulos, mas o usuário está conectado apenas a uma parte deles). há um monte de coisas acopladas aos módulos, como perguntas, ...

por exemplo: a visualização de detalhes do controlador Modules.

    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");
    }

com este código, verifico se este usuário está acoplado ao módulo especificado que ele solicitou para ver seus detalhes.

Eu não gosto desse método, pois nem sempre retorno umModule na minha opinião, isso tem muitos métodos de sobrecarga e, para as subpáginas dos módulos, como as Perguntas, também preciso verificar se a pessoa está olhando para as perguntas de um módulo ao qual tem acesso.

Eu gostaria de fazer isso com um atributo de autorização, que usaria o ID do módulo e, com isso, permitiria ou negaria o acesso a esse módulo. Meu problema é que, quando um usuário solicita uma pergunta, preciso descobrir o ID do módulo com algum código. Às vezes, o moduleID está no URL, mas esse nem sempre é o caso.

Como eu faria isso ? seria bom tentar usar o atributo? ou preciso fazer isso de maneira diferente?

Editar:

Estou tentando o que está sendo sugerido nas respostas, mas como obtenho dados roteados (como ID) no construtor de controladores?

questionAnswers(1)

yourAnswerToTheQuestion