1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-01 16:12:49 -05:00

Add support for new collection access, hide passwords

This commit is contained in:
hinton
2020-05-21 15:36:47 +02:00
parent 0cd90be83a
commit 36f15c67d0
26 changed files with 95 additions and 31 deletions

View File

@ -11,13 +11,15 @@ namespace Bit.Core.Models.Api
[Required] [Required]
public string Id { get; set; } public string Id { get; set; }
public bool ReadOnly { get; set; } public bool ReadOnly { get; set; }
public bool HidePasswords { get; set; }
public SelectionReadOnly ToSelectionReadOnly() public SelectionReadOnly ToSelectionReadOnly()
{ {
return new SelectionReadOnly return new SelectionReadOnly
{ {
Id = new Guid(Id), Id = new Guid(Id),
ReadOnly = ReadOnly ReadOnly = ReadOnly,
HidePasswords = HidePasswords
}; };
} }
} }

View File

@ -89,11 +89,13 @@ namespace Bit.Core.Models.Api
FolderId = cipher.FolderId?.ToString(); FolderId = cipher.FolderId?.ToString();
Favorite = cipher.Favorite; Favorite = cipher.Favorite;
Edit = cipher.Edit; Edit = cipher.Edit;
ViewPassword = cipher.ViewPassword;
} }
public string FolderId { get; set; } public string FolderId { get; set; }
public bool Favorite { get; set; } public bool Favorite { get; set; }
public bool Edit { get; set; } public bool Edit { get; set; }
public bool ViewPassword { get; set; }
} }
public class CipherDetailsResponseModel : CipherResponseModel public class CipherDetailsResponseModel : CipherResponseModel

View File

@ -34,9 +34,11 @@ namespace Bit.Core.Models.Api
: base(collectionDetails, "collectionDetails") : base(collectionDetails, "collectionDetails")
{ {
ReadOnly = collectionDetails.ReadOnly; ReadOnly = collectionDetails.ReadOnly;
HidePasswords = collectionDetails.HidePasswords;
} }
public bool ReadOnly { get; set; } public bool ReadOnly { get; set; }
public bool HidePasswords { get; set; }
} }
public class CollectionGroupDetailsResponseModel : CollectionResponseModel public class CollectionGroupDetailsResponseModel : CollectionResponseModel

View File

@ -14,9 +14,11 @@ namespace Bit.Core.Models.Api
Id = selection.Id.ToString(); Id = selection.Id.ToString();
ReadOnly = selection.ReadOnly; ReadOnly = selection.ReadOnly;
HidePasswords = selection.HidePasswords;
} }
public string Id { get; set; } public string Id { get; set; }
public bool ReadOnly { get; set; } public bool ReadOnly { get; set; }
public bool HidePasswords { get; set; }
} }
} }

View File

@ -7,5 +7,6 @@ namespace Core.Models.Data
public Guid? FolderId { get; set; } public Guid? FolderId { get; set; }
public bool Favorite { get; set; } public bool Favorite { get; set; }
public bool Edit { get; set; } public bool Edit { get; set; }
public bool ViewPassword { get; set; }
} }
} }

View File

@ -5,5 +5,6 @@ namespace Bit.Core.Models.Data
public class CollectionDetails : Collection public class CollectionDetails : Collection
{ {
public bool ReadOnly { get; set; } public bool ReadOnly { get; set; }
public bool HidePasswords { get; set; }
} }
} }

View File

@ -6,5 +6,6 @@ namespace Bit.Core.Models.Data
{ {
public Guid Id { get; set; } public Guid Id { get; set; }
public bool ReadOnly { get; set; } public bool ReadOnly { get; set; }
public bool HidePasswords { get; set; }
} }
} }

View File

@ -125,6 +125,8 @@ namespace Bit.Core.Utilities
table.Columns.Add(idColumn); table.Columns.Add(idColumn);
var readOnlyColumn = new DataColumn("ReadOnly", typeof(bool)); var readOnlyColumn = new DataColumn("ReadOnly", typeof(bool));
table.Columns.Add(readOnlyColumn); table.Columns.Add(readOnlyColumn);
var hidePasswordsColumn = new DataColumn("HidePasswords", typeof(bool));
table.Columns.Add(hidePasswordsColumn);
if (values != null) if (values != null)
{ {
@ -133,6 +135,7 @@ namespace Bit.Core.Utilities
var row = table.NewRow(); var row = table.NewRow();
row[idColumn] = value.Id; row[idColumn] = value.Id;
row[readOnlyColumn] = value.ReadOnly; row[readOnlyColumn] = value.ReadOnly;
row[hidePasswordsColumn] = value.HidePasswords;
table.Rows.Add(row); table.Rows.Add(row);
} }
} }

View File

@ -23,6 +23,13 @@ SELECT
THEN 1 THEN 1
ELSE 0 ELSE 0
END [Edit], END [Edit],
CASE
WHEN
CU.[HidePasswords] = 0
OR CG.[HidePasswords] = 0
THEN 1
ELSE 0
END [ViewPassword],
CASE CASE
WHEN O.[UseTotp] = 1 WHEN O.[UseTotp] = 1
THEN 1 THEN 1
@ -55,6 +62,7 @@ UNION ALL
SELECT SELECT
*, *,
1 [Edit], 1 [Edit],
1 [ViewPassword],
0 [OrganizationUseTotp] 0 [OrganizationUseTotp]
FROM FROM
[dbo].[CipherDetails](@UserId) [dbo].[CipherDetails](@UserId)

View File

@ -11,7 +11,14 @@ SELECT
OR CG.[ReadOnly] = 0 OR CG.[ReadOnly] = 0
THEN 0 THEN 0
ELSE 1 ELSE 1
END [ReadOnly] END [ReadOnly],
CASE
WHEN
CU.[HidePasswords] = 0
OR CG.[HidePasswords] = 0
THEN 0
ELSE 1
END [HidePasswords]
FROM FROM
[dbo].[CollectionView] C [dbo].[CollectionView] C
INNER JOIN INNER JOIN

View File

@ -6,7 +6,8 @@ BEGIN
SELECT SELECT
[OrganizationUserId] [Id], [OrganizationUserId] [Id],
[ReadOnly] [ReadOnly],
[HidePasswords]
FROM FROM
[dbo].[CollectionUser] [dbo].[CollectionUser]
WHERE WHERE

View File

@ -35,10 +35,15 @@ BEGIN
( (
@CollectionId, @CollectionId,
[Source].[Id], [Source].[Id],
[Source].[ReadOnly] [Source].[ReadOnly],
[Source].[HidePasswords]
) )
WHEN MATCHED AND [Target].[ReadOnly] != [Source].[ReadOnly] THEN WHEN MATCHED AND (
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly] [Target].[ReadOnly] != [Source].[ReadOnly]
OR [Target].[HidePasswords] != [Source].[HidePasswords]
) THEN
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
[Target].[HidePasswords] = [Source].[HidePasswords]
WHEN NOT MATCHED BY SOURCE WHEN NOT MATCHED BY SOURCE
AND [Target].[CollectionId] = @CollectionId THEN AND [Target].[CollectionId] = @CollectionId THEN
DELETE DELETE

View File

@ -24,12 +24,14 @@ BEGIN
( (
[CollectionId], [CollectionId],
[GroupId], [GroupId],
[ReadOnly] [ReadOnly],
[HidePasswords]
) )
SELECT SELECT
@Id, @Id,
[Id], [Id],
[ReadOnly] [ReadOnly],
[HidePasswords]
FROM FROM
@Groups @Groups
WHERE WHERE

View File

@ -8,7 +8,8 @@ BEGIN
SELECT SELECT
[GroupId] [Id], [GroupId] [Id],
[ReadOnly] [ReadOnly],
[HidePasswords]
FROM FROM
[dbo].[CollectionGroup] [dbo].[CollectionGroup]
WHERE WHERE

View File

@ -9,7 +9,8 @@ BEGIN
SELECT SELECT
[GroupId] [Id], [GroupId] [Id],
[ReadOnly] [ReadOnly],
[HidePasswords]
FROM FROM
[dbo].[CollectionGroup] [dbo].[CollectionGroup]
WHERE WHERE

View File

@ -33,10 +33,15 @@ BEGIN
( (
@Id, @Id,
[Source].[Id], [Source].[Id],
[Source].[ReadOnly] [Source].[ReadOnly],
[Source].[HidePasswords]
) )
WHEN MATCHED AND [Target].[ReadOnly] != [Source].[ReadOnly] THEN WHEN MATCHED AND (
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly] [Target].[ReadOnly] != [Source].[ReadOnly]
OR [Target].[HidePasswords] != [Source].[HidePasswords]
) THEN
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
[Target].[HidePasswords] = [Source].[HidePasswords]
WHEN NOT MATCHED BY SOURCE WHEN NOT MATCHED BY SOURCE
AND [Target].[CollectionId] = @Id THEN AND [Target].[CollectionId] = @Id THEN
DELETE DELETE

View File

@ -25,12 +25,14 @@ BEGIN
( (
[CollectionId], [CollectionId],
[GroupId], [GroupId],
[ReadOnly] [ReadOnly],
[HidePasswords]
) )
SELECT SELECT
[Id], [Id],
@Id, @Id,
[ReadOnly] [ReadOnly],
[HidePasswords]
FROM FROM
@Collections @Collections
WHERE WHERE

View File

@ -8,7 +8,8 @@ BEGIN
SELECT SELECT
[CollectionId] [Id], [CollectionId] [Id],
[ReadOnly] [ReadOnly],
[HidePasswords]
FROM FROM
[dbo].[CollectionGroup] [dbo].[CollectionGroup]
WHERE WHERE

View File

@ -34,10 +34,15 @@ BEGIN
( (
[Source].[Id], [Source].[Id],
@Id, @Id,
[Source].[ReadOnly] [Source].[ReadOnly],
[Source].[HidePasswords]
) )
WHEN MATCHED AND [Target].[ReadOnly] != [Source].[ReadOnly] THEN WHEN MATCHED AND (
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly] [Target].[ReadOnly] != [Source].[ReadOnly]
OR [Target].[HidePasswords] != [Source].[HidePasswords]
) THEN
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
[Target].[HidePasswords] = [Source].[HidePasswords]
WHEN NOT MATCHED BY SOURCE WHEN NOT MATCHED BY SOURCE
AND [Target].[GroupId] = @Id THEN AND [Target].[GroupId] = @Id THEN
DELETE DELETE

View File

@ -8,7 +8,8 @@ BEGIN
SELECT SELECT
CU.[CollectionId] Id, CU.[CollectionId] Id,
CU.[ReadOnly] CU.[ReadOnly],
CU.[HidePasswords]
FROM FROM
[dbo].[OrganizationUser] OU [dbo].[OrganizationUser] OU
INNER JOIN INNER JOIN

View File

@ -29,12 +29,14 @@ BEGIN
( (
[CollectionId], [CollectionId],
[OrganizationUserId], [OrganizationUserId],
[ReadOnly] [ReadOnly],
[HidePasswords]
) )
SELECT SELECT
[Id], [Id],
@Id, @Id,
[ReadOnly] [ReadOnly],
[HidePasswords]
FROM FROM
@Collections @Collections
WHERE WHERE

View File

@ -8,7 +8,8 @@ BEGIN
SELECT SELECT
CU.[CollectionId] Id, CU.[CollectionId] Id,
CU.[ReadOnly] CU.[ReadOnly],
CU.[HidePasswords]
FROM FROM
[dbo].[OrganizationUser] OU [dbo].[OrganizationUser] OU
INNER JOIN INNER JOIN

View File

@ -38,10 +38,15 @@ BEGIN
( (
[Source].[Id], [Source].[Id],
@Id, @Id,
[Source].[ReadOnly] [Source].[ReadOnly],
[Source].[HidePasswords]
) )
WHEN MATCHED AND [Target].[ReadOnly] != [Source].[ReadOnly] THEN WHEN MATCHED AND (
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly] [Target].[ReadOnly] != [Source].[ReadOnly]
OR [Target].[HidePasswords] != [Source].[HidePasswords]
) THEN
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
[Target].[HidePasswords] = [Source].[HidePasswords]
WHEN NOT MATCHED BY SOURCE WHEN NOT MATCHED BY SOURCE
AND [Target].[OrganizationUserId] = @Id THEN AND [Target].[OrganizationUserId] = @Id THEN
DELETE DELETE

View File

@ -1,7 +1,8 @@
CREATE TABLE [dbo].[CollectionGroup] ( CREATE TABLE [dbo].[CollectionGroup] (
[CollectionId] UNIQUEIDENTIFIER NOT NULL, [CollectionId] UNIQUEIDENTIFIER NOT NULL,
[GroupId] UNIQUEIDENTIFIER NOT NULL, [GroupId] UNIQUEIDENTIFIER NOT NULL,
[ReadOnly] BIT NOT NULL, [ReadOnly] BIT NOT NULL,
[HidePasswords] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_CollectionGroup] PRIMARY KEY CLUSTERED ([CollectionId] ASC, [GroupId] ASC), CONSTRAINT [PK_CollectionGroup] PRIMARY KEY CLUSTERED ([CollectionId] ASC, [GroupId] ASC),
CONSTRAINT [FK_CollectionGroup_Collection] FOREIGN KEY ([CollectionId]) REFERENCES [dbo].[Collection] ([Id]), CONSTRAINT [FK_CollectionGroup_Collection] FOREIGN KEY ([CollectionId]) REFERENCES [dbo].[Collection] ([Id]),
CONSTRAINT [FK_CollectionGroup_Group] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[Group] ([Id]) ON DELETE CASCADE CONSTRAINT [FK_CollectionGroup_Group] FOREIGN KEY ([GroupId]) REFERENCES [dbo].[Group] ([Id]) ON DELETE CASCADE

View File

@ -2,6 +2,7 @@
[CollectionId] UNIQUEIDENTIFIER NOT NULL, [CollectionId] UNIQUEIDENTIFIER NOT NULL,
[OrganizationUserId] UNIQUEIDENTIFIER NOT NULL, [OrganizationUserId] UNIQUEIDENTIFIER NOT NULL,
[ReadOnly] BIT NOT NULL, [ReadOnly] BIT NOT NULL,
[HidePasswords] BIT NOT NULL DEFAULT 0,
CONSTRAINT [PK_CollectionUser] PRIMARY KEY CLUSTERED ([CollectionId] ASC, [OrganizationUserId] ASC), CONSTRAINT [PK_CollectionUser] PRIMARY KEY CLUSTERED ([CollectionId] ASC, [OrganizationUserId] ASC),
CONSTRAINT [FK_CollectionUser_Collection] FOREIGN KEY ([CollectionId]) REFERENCES [dbo].[Collection] ([Id]) ON DELETE CASCADE, CONSTRAINT [FK_CollectionUser_Collection] FOREIGN KEY ([CollectionId]) REFERENCES [dbo].[Collection] ([Id]) ON DELETE CASCADE,
CONSTRAINT [FK_CollectionUser_OrganizationUser] FOREIGN KEY ([OrganizationUserId]) REFERENCES [dbo].[OrganizationUser] ([Id]) CONSTRAINT [FK_CollectionUser_OrganizationUser] FOREIGN KEY ([OrganizationUserId]) REFERENCES [dbo].[OrganizationUser] ([Id])

View File

@ -1,4 +1,5 @@
CREATE TYPE [dbo].[SelectionReadOnlyArray] AS TABLE ( CREATE TYPE [dbo].[SelectionReadOnlyArray] AS TABLE (
[Id] UNIQUEIDENTIFIER NOT NULL, [Id] UNIQUEIDENTIFIER NOT NULL,
[ReadOnly] BIT NOT NULL); [ReadOnly] BIT NOT NULL,
[HidePasswords] BIT NOT NULL);