Skip to content

Commit b32f0ed

Browse files
committed
Add initial SQL Server store.
1 parent f18509e commit b32f0ed

File tree

6 files changed

+128
-2
lines changed

6 files changed

+128
-2
lines changed

DynamicRoleBasedAuthorization.sln

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleMvcWebAppWithUi", "sa
2929
EndProject
3030
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "net5", "net5", "{85C709D5-793A-4068-9937-4749BCF34267}"
3131
EndProject
32-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleMvcWebWithUi", "samples\net5\SampleMvcWebWithUi\SampleMvcWebWithUi.csproj", "{8CEDCB64-13BF-4AD1-B7F4-01A8BB42AB07}"
32+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SampleMvcWebWithUi", "samples\net5\SampleMvcWebWithUi\SampleMvcWebWithUi.csproj", "{8CEDCB64-13BF-4AD1-B7F4-01A8BB42AB07}"
33+
EndProject
34+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DynamicAuthorization.Mvc.MsSqlServerStore", "src\DynamicAuthorization.Mvc.MsSqlServerStore\DynamicAuthorization.Mvc.MsSqlServerStore.csproj", "{2CAEFC83-24BF-4C92-B6F1-B3C6714220F2}"
3335
EndProject
3436
Global
3537
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -69,6 +71,10 @@ Global
6971
{8CEDCB64-13BF-4AD1-B7F4-01A8BB42AB07}.Debug|Any CPU.Build.0 = Debug|Any CPU
7072
{8CEDCB64-13BF-4AD1-B7F4-01A8BB42AB07}.Release|Any CPU.ActiveCfg = Release|Any CPU
7173
{8CEDCB64-13BF-4AD1-B7F4-01A8BB42AB07}.Release|Any CPU.Build.0 = Release|Any CPU
74+
{2CAEFC83-24BF-4C92-B6F1-B3C6714220F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
75+
{2CAEFC83-24BF-4C92-B6F1-B3C6714220F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
76+
{2CAEFC83-24BF-4C92-B6F1-B3C6714220F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
77+
{2CAEFC83-24BF-4C92-B6F1-B3C6714220F2}.Release|Any CPU.Build.0 = Release|Any CPU
7278
EndGlobalSection
7379
GlobalSection(SolutionProperties) = preSolution
7480
HideSolutionNode = FALSE
@@ -85,6 +91,7 @@ Global
8591
{803E1492-22FA-4F63-9687-A30902682C15} = {5FEB9007-1EFA-4814-BC15-DB0370B84E22}
8692
{85C709D5-793A-4068-9937-4749BCF34267} = {BAAF9837-1DB5-4032-AB2A-2901E6EE6EF8}
8793
{8CEDCB64-13BF-4AD1-B7F4-01A8BB42AB07} = {85C709D5-793A-4068-9937-4749BCF34267}
94+
{2CAEFC83-24BF-4C92-B6F1-B3C6714220F2} = {A7EEBB7E-C64D-4475-93D0-872E080A4E03}
8895
EndGlobalSection
8996
GlobalSection(ExtensibilityGlobals) = postSolution
9097
SolutionGuid = {18C80710-C9E9-488B-9100-1E4BF8B18038}

src/DynamicAuthorization.Mvc.Core/Models/DynamicAuthorizationOptions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using System;
22
using System.Runtime.CompilerServices;
33

4-
[assembly: InternalsVisibleTo("DynamicAuthorization.Mvc.Ui")]
4+
[assembly: InternalsVisibleTo("DynamicAuthorization.Mvc.Ui"),
5+
InternalsVisibleTo("DynamicAuthorization.Mvc.MsSqlServerStore")]
56

67
namespace DynamicAuthorization.Mvc.Core.Models
78
{
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netstandard2.0</TargetFramework>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<PackageReference Include="Dapper" Version="2.0.30" />
9+
</ItemGroup>
10+
11+
<ItemGroup>
12+
<ProjectReference Include="..\DynamicAuthorization.Mvc.Core\DynamicAuthorization.Mvc.Core.csproj" />
13+
</ItemGroup>
14+
15+
</Project>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using DynamicAuthorization.Mvc.Core;
2+
using System.Threading.Tasks;
3+
4+
namespace DynamicAuthorization.Mvc.MsSqlServerStore
5+
{
6+
public class RoleAccessStore : IRoleAccessStore
7+
{
8+
public Task<bool> AddRoleAccessAsync(RoleAccess roleAccess)
9+
{
10+
throw new System.NotImplementedException();
11+
}
12+
13+
public Task<bool> EditRoleAccessAsync(RoleAccess roleAccess)
14+
{
15+
throw new System.NotImplementedException();
16+
}
17+
18+
public Task<bool> RemoveRoleAccessAsync(string roleId)
19+
{
20+
throw new System.NotImplementedException();
21+
}
22+
23+
public Task<RoleAccess> GetRoleAccessAsync(string roleId)
24+
{
25+
throw new System.NotImplementedException();
26+
}
27+
28+
public Task<bool> HasAccessToActionAsync(string actionId, params string[] roles)
29+
{
30+
throw new System.NotImplementedException();
31+
}
32+
}
33+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace DynamicAuthorization.Mvc.MsSqlServerStore
2+
{
3+
public class SqlOptions
4+
{
5+
public string ConnectionString { get; set; }
6+
}
7+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using DynamicAuthorization.Mvc.Core.Models;
2+
using System;
3+
using System.Text;
4+
5+
namespace DynamicAuthorization.Mvc.MsSqlServerStore
6+
{
7+
internal class SqlTableCreator
8+
{
9+
public void CreateTable()
10+
{
11+
try
12+
{
13+
using (var conn = _sqlConnectionFactory.Create())
14+
{
15+
var sql = GetTableDdl();
16+
using (var cmd = conn.CreateCommand(sql))
17+
{
18+
conn.Open();
19+
cmd.ExecuteNonQuery();
20+
}
21+
}
22+
}
23+
catch (Exception ex)
24+
{
25+
Console.WriteLine($"Exception creating table AccessRole:\n{ex}");
26+
}
27+
}
28+
29+
private string GetTableDdl()
30+
{
31+
var sql = new StringBuilder();
32+
sql.AppendLine("IF NOT EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[RoleAccess]') AND type IN ('U')) ");
33+
sql.AppendLine("BEGIN ");
34+
sql.AppendLine("CREATE TABLE [dbo].[RoleAccess] ( ");
35+
sql.AppendLine("[Id] int IDENTITY(1,1) NOT NULL, ");
36+
sql.AppendLine($"[RoleId] {GetRoleIdType()} NOT NULL, ");
37+
sql.AppendLine("[Access] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL );");
38+
sql.AppendLine("ALTER TABLE [dbo].[RoleAccess] SET (LOCK_ESCALATION = TABLE);");
39+
sql.AppendLine("DBCC CHECKIDENT ('[dbo].[RoleAccess]', RESEED, 1);");
40+
sql.AppendLine("CREATE NONCLUSTERED INDEX [IX_AspNetRoleClaims_RoleId] ");
41+
sql.AppendLine("ON [dbo].[AspNetRoleClaims] ([RoleId] ASC);");
42+
sql.AppendLine("ALTER TABLE [dbo].[RoleAccess] ADD CONSTRAINT [PK_RoleAccess] PRIMARY KEY CLUSTERED ([Id]) ");
43+
sql.AppendLine("WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ");
44+
sql.AppendLine("ON [PRIMARY];");
45+
sql.AppendLine("ALTER TABLE [dbo].[RoleAccess] ADD CONSTRAINT [FK_RoleAccess_AspNetRoles_RoleId] ");
46+
sql.AppendLine("FOREIGN KEY ([RoleId]) REFERENCES [dbo].[AspNetRoles] ([Id]) ON DELETE CASCADE ON UPDATE NO ACTION;");
47+
sql.AppendLine("END");
48+
49+
return sql.ToString();
50+
}
51+
52+
private string GetRoleIdType()
53+
{
54+
if (DynamicAuthorizationOptions.RoleType == typeof(Guid))
55+
return "uniqueidentifier";
56+
57+
if (DynamicAuthorizationOptions.RoleType == typeof(string))
58+
return "nvarchar(450) COLLATE SQL_Latin1_General_CP1_CI_AS";
59+
60+
return "int";
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)