4 changed files with 98 additions and 13 deletions
@ -0,0 +1,52 @@
@@ -0,0 +1,52 @@
|
||||
-- PolicyApplicableToUser |
||||
IF OBJECT_ID('[dbo].[PolicyApplicableToUser]') IS NOT NULL |
||||
BEGIN |
||||
DROP FUNCTION [dbo].[PolicyApplicableToUser] |
||||
END |
||||
GO |
||||
|
||||
CREATE FUNCTION [dbo].[PolicyApplicableToUser] |
||||
( |
||||
@UserId UNIQUEIDENTIFIER, |
||||
@PolicyType TINYINT, |
||||
@MinimumStatus TINYINT |
||||
) |
||||
RETURNS TABLE |
||||
AS RETURN |
||||
SELECT |
||||
P.* |
||||
FROM |
||||
[dbo].[PolicyView] P |
||||
INNER JOIN |
||||
[dbo].[OrganizationUserView] OU ON P.[OrganizationId] = OU.[OrganizationId] |
||||
LEFT JOIN |
||||
(SELECT |
||||
PU.UserId, |
||||
PO.OrganizationId |
||||
FROM |
||||
[dbo].[ProviderUserView] PU |
||||
INNER JOIN |
||||
[ProviderOrganizationView] PO ON PO.[ProviderId] = PU.[ProviderId]) PUPO |
||||
ON PUPO.UserId = OU.UserId |
||||
AND PUPO.OrganizationId = P.OrganizationId |
||||
WHERE |
||||
( |
||||
( |
||||
OU.[Status] > 0 |
||||
AND OU.[UserId] = @UserId |
||||
) |
||||
OR ( |
||||
OU.[Status] = 0 -- 'Invited' OrgUsers are not associated with a UserId yet, so we have to look up their email |
||||
AND OU.[Email] IN (SELECT U.Email FROM [dbo].[UserView] U WHERE U.Id = @UserId) |
||||
) |
||||
) |
||||
AND P.[Type] = @PolicyType |
||||
AND P.[Enabled] = 1 |
||||
AND OU.[Status] >= @MinimumStatus |
||||
AND OU.[Type] >= 2 -- Not an owner (0) or admin (1) |
||||
AND ( -- Can't manage policies |
||||
OU.[Permissions] IS NULL |
||||
OR COALESCE(JSON_VALUE(OU.[Permissions], '$.managePolicies'), 'false') = 'false' |
||||
) |
||||
AND PUPO.[UserId] IS NULL -- Not a provider |
||||
GO |
||||
Loading…
Reference in new issue