Полагаю, вам нужны такие функции, потому что вы добавляете новые роли во время выполнения и пытаетесь соединить их с функциями, которые предоставляет ваше приложение. Если я не ошибаюсь, у вас также должен быть где-то список функциональных возможностей (в БД, реестре или конфигурационном файле). Учитывая все это, я полагаю, что вы ставите пользователей в роли и прикрепляете роли к функциональности, и вы сохраняете эти отношения в хранилище данных.
Итак, учитывая все это, вы можете придумать собственный атрибут (декоратор) для ваших действий, который скажет что-то вроде
[AuthorizeUsers]
вместо
[Authorize(Roles="Admin")]
поэтому выдает любую ссылку на какую-либо роль и, скорее, входит в хранилище данных, перечисляет все отношения и проверяет все роли / пользователей и их, я бы сказал, разрешения . И тогда вы либо отклоните их запрос (например, вернете их в другое представление, к которому у них есть доступ), либо дадите им возможность выбрать разрешения (что-то вроде SharePoint делает, когда вы получаете доступ к частям страницы, для которых у вас нет разрешений) ).
Точный пример кода для создания пользовательской авторизации можно найти в исходном коде ASP.NET MVC - пространстве имен System.Web.Mvc.
НТН