我有一个Pages表,我有一个带有PageId的PagesRoles表,RoleID链接到ASP.Net Membership Roles表和Pages表。
我想以某种方式返回链接到当前登录用户角色的页面。
用户可能有多个角色。一个页面可以有多个角色。
我有一个具有IQueryable外键属性的Page类。 PageRoles具有IQueryable到ASPNet角色表(IQueryable)和IQueryable
由于
修改
使用Adam的答案来获取分配给它的角色的所有页面与当前登录用户的角色之一匹配我有一个额外的问题。我有一个Menu表,它有一个PageID外键和一个CategoryID。
我想返回CategoryID为4的所有菜单项。对于那些有PageID的人,我需要确保允许用户根据他的角色查看该页面。我认为亚当的询问会这样做。所以我认为我需要的是一个UNION,返回所有菜单项,其中PageID为null,CategoryID为4,并返回CategoryID为4的所有菜单项,并加入当前用户角色所在的Page-> PageRole-> ASPNetRole ASPNetRole的结果。
答案 0 :(得分:0)
如果您使用的是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;