Domanda

Ho una tabella Pages, ho una tabella PagesRoles con PageId, RoleID che si collega alla tabella Ruoli di appartenenza ASP.Net e alla tabella Pages.

Voglio in qualche modo restituire una Pagina che rimanda ai ruoli dell'utente attualmente connesso.

L'utente può ricoprire più di un ruolo. Una pagina può avere più di un ruolo nei suoi confronti.

Ho una classe Page che ha una proprietà di chiave esterna di IQueryable. PageRoles ha una tabella IQueryable a ASPNet Roles (IQueryable) e IQueryable

Grazie

Modifica

Utilizzando la risposta di Adam per ottenere tutte le pagine a cui è assegnato un ruolo che corrisponde a uno dei ruoli dell'utente attualmente connesso, ho riscontrato un problema. Ho una tabella di menu che ha una chiave esterna PageID e un ID categoria.

Vorrei restituire tutte le voci di menu con un ID categoria di 4. Per coloro che hanno un ID pagina, devo assicurarmi che l'utente sia autorizzato a vedere quella pagina in base al suo ruolo. Penso che la domanda di Adam lo farebbe. Quindi penso che ciò di cui ho bisogno sia un UNION, restituisca tutte le voci di menu in cui PageID è nullo e CategoryID è 4 e restituisce tutte le voci di menu in cui CategoryID è 4 e unisciti a Page- > PageRole- > ASPNetRole in cui si trovano i ruoli degli utenti correnti che risultati ASPNetRole.

È stato utile?

Soluzione

Se si utilizza SubSonic 3, una query come la seguente dovrebbe funzionare:

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top