Я думаю, что ваше решение выглядит хорошо. Если вы сильно полагаетесь на роли ASP.NET, чтобы выполнить начальный подъем для вас, у вас будет много проблем:
Пользователь 1 - менеджер для команды 1 и обычный пользователь для команды 2. ViewSchedule доступен только для пользователей и доступен для редактирования менеджерам. Код на ViewSchedule:
if (User.IsInRole("manager")) {
if (isTeamManager(userid)) {}
}
else {}
bool isTeamManager(int userid) {
return db.IsTeamManager(userid) {
}
Если вы сделаете это, то, когда пользователь использует команду 2, он вообще пропустит этот блок. Он является менеджером в отношении ролей ASP.NET, но не для этой команды. Нет проблем, очевидно, мы можем объединить условия следующим образом:
if (User.IsInRole("manager") && isTeamManager(userid)) { }
else {}
О, да, и если мы вызываем isTeamManager (), то мы уже получаем единственную информацию, которую предоставляет User.IsInRole ("manager"), поэтому нам это даже не нужно:
if (isTeamManager(userid)) { }
else {}
Так что теперь мы даже не используем роли в нашем коде. Я бы просто придерживался твоей оригинальной идеи.