Pergunta

Eu tenho uma tabela de páginas, eu tenho uma tabela PagesRoles com PageId, RoleID que os links para ASP.Net Membership mesa Roles e tabela de páginas.

Eu quero voltar de alguma forma, uma página que links para conectado no momento Papéis do usuário.

O usuário pode estar em mais de uma função. A página pode ter mais de uma função contra ela.

Eu tenho uma classe de página que tem uma propriedade de chave estrangeira de IQueryable. PageRoles tem um IQueryable para ASPNet Roles mesa (IQueryable) e IQueryable

Graças

EDIT:

Usando resposta de Adam para obter todas as páginas que têm um papel atribuído a ele o que corresponde a um dos conectado no momento em papéis do usuário Tenho um problema adicional. Eu tenho uma tabela de menu que tem uma chave estrangeira PageID e uma CategoryID.

Gostaria de devolver todos os itens do menu com uma CategoryID de 4. Para aqueles que têm um PageID eu preciso ter certeza de que o usuário tem permissão para ver a página com base em seu papel. Eu acho que a pergunta de Adam faria isso. Então eu acho que o que eu preciso é uma união, devolver todos os itens do menu, onde PageID é nula e CategoryID é 4 e devolver todos os itens do menu, onde CategoryID é 4 e juntar-se ao Página-> PageRole-> ASPNetRole onde os papéis de usuários atuais é nesse ASPNetRole resultados.

Foi útil?

Solução

Se você estiver usando SubSonic 3 uma consulta como a seguinte deve funcionar:

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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top