Контрольный список: 1) Вам нужно вносить изменения, когда веб-сайт находится в сети, без простоев?2) Будете ли вы использовать встроенную роль / поставщика услуг?3) Вы хотите использовать атрибуты (например, mvc [Authorize]) и т. Д.?4) Вы хотите, чтобы пользователи могли программно изменять разрешения / роли?
Любое из вышеперечисленных средств означает, что вы должны хранить информацию в БД.
Для небольших приложений я предпочитаю просто создать несколькостатические методы, которые также используют какое-то наследование, например:
isadmin()
{
if (usernameArray.Contains[currentname])
return true;
[...]
}
ispublisher()
{
if (isadmin()) return true;
[...]
}
и таблицу с разрешениями для каждого псевдокласса пользователя.
Обновление : схема БД дляопределенный доступ: (* является ключом, & является внешним ключом)
Users:
Username *
[...]
UserClasses (EG: admin...)
ID *
description
AccessTypes (EG: can delete)
ID *
description
UserClassesAssign
classid *&
username *&
AccessPerClass
accessid *&
classid *&
Таким образом, в любое время, когда вы хотите увидеть, может ли 'username' 'CanDelete', вы должны проверить, связано ли пользовательское 'username'к любым классам, которые связаны с доступом 'CanDelete', и эти ссылки, конечно, могут изменяться во время выполнения