Вопрос

У меня есть таблица Pages, таблица PagesRoles с PageId, RoleID, которая ссылается на таблицу ролей членства ASP.Net и таблицу страниц.

Я хочу каким-то образом вернуть страницу, которая ссылается на роли пользователя, вошедшего в систему в данный момент.

Пользователь может выполнять более чем одну роль.Страница может иметь более одной роли.

У меня есть класс страницы, который имеет свойство внешнего ключа IQueryable.PageRoles имеет таблицу ролей IQueryable to ASPNet (IQueryable) и IQueryable.

Спасибо

РЕДАКТИРОВАТЬ:

Используя ответ Адама, чтобы получить все страницы, которым назначена роль, соответствующая одной из ролей пользователя, вошедшего в систему в данный момент, у меня возникла дополнительная проблема.У меня есть таблица меню с внешним ключом PageID и CategoryID.

Я хотел бы вернуть все элементы меню с идентификатором категории 4.Для тех, у кого есть PageID, мне нужно убедиться, что пользователю разрешено видеть эту страницу в зависимости от его роли.Я думаю, что запрос Адама поможет это сделать.Поэтому я думаю, что мне нужен UNION, вернуть все элементы меню, где PageID равен нулю, а CategoryID равен 4, и вернуть все элементы меню, где CategoryID равен 4, и присоединиться к Page->PageRole->ASPNetRole, где текущие роли пользователей находятся в этой ASPNetRole. Результаты.

Это было полезно?

Решение

Если вы используете SubSonic 3, должен работать следующий запрос:

var pagesForUser = from pages in Pages.All()
    join pagesRoles in PagesRoles.All() on pages.Id equals pagesRoles.PageID
    join roles in Roles.All() on pagesRoles.RoleId equals roles.Id
    where User.GetRoles().Contains(roles.Name)
  select pages;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top