Skip to content

Commit 7fd87b8

Browse files
committed
Granular permissions: removing old permission code (in progress)
1 parent 76cdc0f commit 7fd87b8

2 files changed

Lines changed: 27 additions & 18 deletions

File tree

src/Libraries/SmartStore.Data/Utilities/DataMigrator.cs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
using SmartStore.Core.Infrastructure;
2121
using SmartStore.Core.IO;
2222
using SmartStore.Core.Security;
23-
using SmartStore.Data.Setup;
2423
using SmartStore.Utilities;
2524
using EfState = System.Data.Entity.EntityState;
2625

@@ -935,17 +934,30 @@ public static void AddGranularPermissions(IDbContext context)
935934
throw new ArgumentException("Passed context must be an instance of type '{0}'.".FormatInvariant(typeof(SmartObjectContext)), nameof(context));
936935
}
937936

938-
var permissionSet = ctx.Set<PermissionRecord>();
939937
var mappingSet = ctx.Set<PermissionRoleMapping>();
940-
var allRoles = ctx.Set<CustomerRole>().ToList();
941-
var allPermissions = permissionSet.Expand(x => x.CustomerRoles).ToList();
938+
var permissionSet = ctx.Set<PermissionRecord>();
939+
var allPermissions = permissionSet.ToList();
942940
var newPermissions = new Dictionary<string, PermissionRecord>();
941+
var allRoles = ctx.Set<CustomerRole>().ToList();
943942
var adminRole = allRoles.FirstOrDefault(x => x.SystemName.IsCaseInsensitiveEqual("Administrators"));
944943

944+
// No entity, no navigation property -> use SQL.
945+
var oldMappings = new Multimap<int, int>();
946+
if (((DbContext)context).TableExists("PermissionRecord_Role_Mapping"))
947+
{
948+
oldMappings = context.SqlQuery<OldPermissionRoleMapping>("select * from [dbo].[PermissionRecord_Role_Mapping]")
949+
.ToList()
950+
.ToMultimap(x => x.PermissionRecord_Id, x => x.CustomerRole_Id);
951+
}
952+
945953
var permissionToRoles = new Multimap<string, int>(StringComparer.OrdinalIgnoreCase);
946954
foreach (var permission in allPermissions)
947955
{
948-
permissionToRoles.AddRange(permission.SystemName, permission.CustomerRoles.Select(x => x.Id));
956+
var roleIds = oldMappings.ContainsKey(permission.Id)
957+
? oldMappings[permission.Id]
958+
: Enumerable.Empty<int>();
959+
960+
permissionToRoles.AddRange(permission.SystemName, roleIds);
949961
}
950962

951963
var oldPermissions = GetOldPermissions();
@@ -1174,6 +1186,12 @@ Multimap<string, string> GetOldPermissions()
11741186
}
11751187
}
11761188

1189+
public class OldPermissionRoleMapping
1190+
{
1191+
public int PermissionRecord_Id { get; set; }
1192+
public int CustomerRole_Id { get; set; }
1193+
}
1194+
11771195
#endregion
11781196
}
11791197
}

src/Tests/SmartStore.Data.Tests/Security/PermissionRecordPersistenceTests.cs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,14 @@ public class PermissionRecordPersistenceTests : PersistenceTest
1010
[Test]
1111
public void Can_save_and_load_permissionRecord()
1212
{
13-
var permissionRecord = GetTestPermissionRecord();
13+
var permissionRecord = new PermissionRecord
14+
{
15+
SystemName = "SystemName 2"
16+
};
1417

1518
var fromDb = SaveAndLoadEntity(permissionRecord);
1619
fromDb.ShouldNotBeNull();
17-
fromDb.Name.ShouldEqual("Name 1");
1820
fromDb.SystemName.ShouldEqual("SystemName 2");
19-
fromDb.Category.ShouldEqual("Category 4");
20-
}
21-
22-
protected PermissionRecord GetTestPermissionRecord()
23-
{
24-
return new PermissionRecord
25-
{
26-
Name = "Name 1",
27-
SystemName = "SystemName 2",
28-
Category = "Category 4",
29-
};
3021
}
3122
}
3223
}

0 commit comments

Comments
 (0)