Dieser Titel ist nicht sehr gut, so prüfen Sie Folgendes. Ich habe fünf Tabellen:TSQL - Wählen Sie aus der Tabelle mit mehreren Join-Pfaden
Und ich möchte alle Berechtigungen für einen Benutzer bekommen, die ihn direkt verbunden sind oder indirekt über das Profil. Die nicht ganz da SQL ich mit so habe kommen weit ist dies:
SELECT [Pe].[Controller],
[Pe].[Action]
FROM [PermissionSets] AS [PS]
JOIN [UserPermissionSets] AS [UPS]
ON ([UPS].[PermissionSetId] = [PS].[Id])
JOIN [Users] AS [U]
ON ([U].[Id] = [UPS].[UserId])
JOIN [Profiles] AS [P]
ON ([P].[Id] = [U].[ProfileId])
JOIN [ProfilePermissionSets] AS [PPS]
ON ([PPS].[ProfileId] = [P].[Id])
JOIN [Permissions] AS [Pe]
ON ([Pe].[PermissionSetId] = [PS].[Id])
WHERE [U].[Id] = 4;
Es gibt eine richtige Anzahl von Zeilen zurück, aber es ist die Steuerung oder die Aktion immer und immer wieder zu wiederholen, so dass es falsch ist. Ich hoffe, dass jemand mir helfen kann, es zu korrigieren, um alle eindeutigen Berechtigungssätze für den Benutzer zu zeigen. Idealerweise würde ich es auch so ändern, dass es beim Benutzer entdeckt wird, weil ich dazu in der Methode Zugriff habe (das Objekt ist eine Entity Framework-Klasse mit dem Namen User
und wird mit Browsed verwendet LINQ).
AKTUALISIERT, weil ich vergessen, dass ich wirklich die Berechtigung, um die Berechtigungssätze wollten.
Suchen Sie einfach nach 'GROUP BY'? – ZLK
Nicht sicher, ich kenne genug SQL, um Probleme für mich selbst zu verursachen, lol. – Gup3rSuR4c
Hat ein Benutzer immer mindestens einen Eintrag in der Tabelle _UserPermissionSets_? Wenn nicht, werden nur Benutzer mit einem Eintrag in _UserPermissionSets_ oder in _UserPermissionSets_ und _Permissions_ abgerufen. Sie sollten dann 'LEFT OUTER JOIN' verwenden. – schlonzo