Вместо того, чтобы иметь разрешения, основанные непосредственно на ролях, вы можете использовать Авторизация на основе политик
Вы можете определить политику при запуске для каждого из разрешений. Каждой политике может потребоваться роль, поэтому вы все равно будете использовать роли. Каждая политика также может требовать утверждения, где вы сохраняете дату для каждого пользователя, и правило политики может проверять, что дата в утверждении не выходит за пределы диапазона.
В действиях контроллера, соответствующих вашим узлам, вы украшаете метод действия атрибутом Authorize и задаете имя политики, как показано в связанной документации.
[Authorize(Policy = "AtLeast21")]
public class AlcoholPurchaseController : Controller
{
public IActionResult Login() => View();
public IActionResult Logout() => View();
}