11 changed files with 264 additions and 9 deletions
@ -0,0 +1,39 @@
@@ -0,0 +1,39 @@
|
||||
using System.Linq; |
||||
using System; |
||||
using Bit.Core.Enums.Provider; |
||||
using Bit.Core.Models.EntityFramework.Provider; |
||||
|
||||
namespace Bit.Core.Repositories.EntityFramework.Queries |
||||
{ |
||||
public class ProviderUserReadCountByOnlyOwnerQuery : IQuery<ProviderUser> |
||||
{ |
||||
private readonly Guid _userId; |
||||
|
||||
public ProviderUserReadCountByOnlyOwnerQuery(Guid userId) |
||||
{ |
||||
_userId = userId; |
||||
} |
||||
|
||||
public IQueryable<ProviderUser> Run(DatabaseContext dbContext) |
||||
{ |
||||
var owners = from pu in dbContext.ProviderUsers |
||||
where pu.Type == ProviderUserType.ProviderAdmin && |
||||
pu.Status == ProviderUserStatusType.Confirmed |
||||
group pu by pu.ProviderId into g |
||||
select new |
||||
{ |
||||
ProviderUser = g.Select(x => new {x.UserId, x.Id}).FirstOrDefault(), |
||||
ConfirmedOwnerCount = g.Count(), |
||||
}; |
||||
|
||||
var query = from owner in owners |
||||
join pu in dbContext.ProviderUsers |
||||
on owner.ProviderUser.Id equals pu.Id |
||||
where owner.ProviderUser.UserId == _userId && |
||||
owner.ConfirmedOwnerCount == 1 |
||||
select pu; |
||||
|
||||
return query; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
CREATE PROCEDURE [dbo].[ProviderUser_ReadCountByOnlyOwner] |
||||
@UserId UNIQUEIDENTIFIER |
||||
AS |
||||
BEGIN |
||||
SET NOCOUNT ON |
||||
|
||||
;WITH [OwnerCountCTE] AS |
||||
( |
||||
SELECT |
||||
PU.[UserId], |
||||
COUNT(1) OVER (PARTITION BY PU.[ProviderId]) [ConfirmedOwnerCount] |
||||
FROM |
||||
[dbo].[ProviderUser] PU |
||||
WHERE |
||||
PU.[Type] = 0 -- 0 = ProviderAdmin |
||||
AND PU.[Status] = 2 -- 2 = Confirmed |
||||
) |
||||
SELECT |
||||
COUNT(1) |
||||
FROM |
||||
[OwnerCountCTE] OC |
||||
WHERE |
||||
OC.[UserId] = @UserId |
||||
AND OC.[ConfirmedOwnerCount] = 1 |
||||
END |
||||
@ -0,0 +1,153 @@
@@ -0,0 +1,153 @@
|
||||
IF OBJECT_ID('[dbo].[ProviderUser_ReadCountByOnlyOwner]') IS NOT NULL |
||||
BEGIN |
||||
DROP PROCEDURE [dbo].[ProviderUser_ReadCountByOnlyOwner] |
||||
END |
||||
GO |
||||
|
||||
CREATE PROCEDURE [dbo].[ProviderUser_ReadCountByOnlyOwner] |
||||
@UserId UNIQUEIDENTIFIER |
||||
AS |
||||
BEGIN |
||||
SET NOCOUNT ON |
||||
|
||||
;WITH [OwnerCountCTE] AS |
||||
( |
||||
SELECT |
||||
PU.[UserId], |
||||
COUNT(1) OVER (PARTITION BY PU.[ProviderId]) [ConfirmedOwnerCount] |
||||
FROM |
||||
[dbo].[ProviderUser] PU |
||||
WHERE |
||||
PU.[Type] = 0 -- 0 = ProviderAdmin |
||||
AND PU.[Status] = 2 -- 2 = Confirmed |
||||
) |
||||
SELECT |
||||
COUNT(1) |
||||
FROM |
||||
[OwnerCountCTE] OC |
||||
WHERE |
||||
OC.[UserId] = @UserId |
||||
AND OC.[ConfirmedOwnerCount] = 1 |
||||
END |
||||
GO |
||||
|
||||
IF OBJECT_ID('[dbo].[User_DeleteById]') IS NOT NULL |
||||
BEGIN |
||||
DROP PROCEDURE [dbo].[User_DeleteById] |
||||
END |
||||
GO |
||||
|
||||
CREATE PROCEDURE [dbo].[User_DeleteById] |
||||
@Id UNIQUEIDENTIFIER |
||||
WITH RECOMPILE |
||||
AS |
||||
BEGIN |
||||
SET NOCOUNT ON |
||||
DECLARE @BatchSize INT = 100 |
||||
|
||||
-- Delete ciphers |
||||
WHILE @BatchSize > 0 |
||||
BEGIN |
||||
BEGIN TRANSACTION User_DeleteById_Ciphers |
||||
|
||||
DELETE TOP(@BatchSize) |
||||
FROM |
||||
[dbo].[Cipher] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
SET @BatchSize = @@ROWCOUNT |
||||
|
||||
COMMIT TRANSACTION User_DeleteById_Ciphers |
||||
END |
||||
|
||||
BEGIN TRANSACTION User_DeleteById |
||||
|
||||
-- Delete folders |
||||
DELETE |
||||
FROM |
||||
[dbo].[Folder] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
-- Delete devices |
||||
DELETE |
||||
FROM |
||||
[dbo].[Device] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
-- Delete collection users |
||||
DELETE |
||||
CU |
||||
FROM |
||||
[dbo].[CollectionUser] CU |
||||
INNER JOIN |
||||
[dbo].[OrganizationUser] OU ON OU.[Id] = CU.[OrganizationUserId] |
||||
WHERE |
||||
OU.[UserId] = @Id |
||||
|
||||
-- Delete group users |
||||
DELETE |
||||
GU |
||||
FROM |
||||
[dbo].[GroupUser] GU |
||||
INNER JOIN |
||||
[dbo].[OrganizationUser] OU ON OU.[Id] = GU.[OrganizationUserId] |
||||
WHERE |
||||
OU.[UserId] = @Id |
||||
|
||||
-- Delete organization users |
||||
DELETE |
||||
FROM |
||||
[dbo].[OrganizationUser] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
-- Delete provider users |
||||
DELETE |
||||
FROM |
||||
[dbo].[ProviderUser] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
-- Delete U2F logins |
||||
DELETE |
||||
FROM |
||||
[dbo].[U2f] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
-- Delete SSO Users |
||||
DELETE |
||||
FROM |
||||
[dbo].[SsoUser] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
-- Delete Emergency Accesses |
||||
DELETE |
||||
FROM |
||||
[dbo].[EmergencyAccess] |
||||
WHERE |
||||
[GrantorId] = @Id |
||||
OR |
||||
[GranteeId] = @Id |
||||
|
||||
-- Delete Sends |
||||
DELETE |
||||
FROM |
||||
[dbo].[Send] |
||||
WHERE |
||||
[UserId] = @Id |
||||
|
||||
-- Finally, delete the user |
||||
DELETE |
||||
FROM |
||||
[dbo].[User] |
||||
WHERE |
||||
[Id] = @Id |
||||
|
||||
COMMIT TRANSACTION User_DeleteById |
||||
END |
||||
go |
||||
Loading…
Reference in new issue