Контент на основе авторизации из уровня данных - PullRequest
0 голосов
/ 24 апреля 2009

Я работаю над своего рода веб-форумом или, ну, в общем, пытаюсь создать его с использованием ASP.NET MVC. Однако контент на основе ролей пользователей представляет собой более сложную задачу, чем простое использование атрибута [Authorize], поскольку данный вывод отличается в зависимости от ролей доступа.

Таким образом, в то время как пользователь в роли Модераторов должен иметь возможность видеть секретные подплаты, пользовательская часть обычной роли Участника не должна.

Для этого мне нужно правильно спроектировать свой слой данных, но мне очень жаль, как это сделать, так как я действительно хочу следовать шаблону MVC и применять фильтрацию в контроллере, но проблема возникает с вложенным контентом и связями .

Потому что, если Category.Forum в IList не должен быть видимым для данного пользователя, то мне нужно каким-то образом использовать один запрос к базе данных для извлечения Category.Forum, в то время как надлежащий слой данных будет пытаться разделить его на два модуля DA, CategoryDA и ForumDA.

Другое дело - это целое применение пользовательских ролей через систему членства, поскольку пользователь может иметь несколько ролей.

Это немного сложно объяснить, но я думаю, что многие люди знакомы с типичными досками объявлений и могут дать мне представление о том, как правильно спроектировать слой доступа к данным.

Спасибо:)

1 Ответ

0 голосов
/ 08 мая 2009

Вероятно, проще просто создать собственный фильтр действий для авторизации, чем использовать основной атрибут [Authorize] Как это:

public class CheckPermission : ActionFilterAttribute
{
    public override void OnActionExecuting
        (ActionExecutingContext filterContext)
    {
        try
        {
            // do your security checks here
            // if NOT allow, throw NOTAUTHORIZED exception
        }
        catch (Exception ex)
        {
            // handle how to redirect - auto logout, etc
        }
        finally
        {
            base.OnActionExecuting(filterContext);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...