|
20 | 20 | using SmartStore.Core.Infrastructure; |
21 | 21 | using SmartStore.Core.IO; |
22 | 22 | using SmartStore.Core.Security; |
23 | | -using SmartStore.Data.Setup; |
24 | 23 | using SmartStore.Utilities; |
25 | 24 | using EfState = System.Data.Entity.EntityState; |
26 | 25 |
|
@@ -935,17 +934,30 @@ public static void AddGranularPermissions(IDbContext context) |
935 | 934 | throw new ArgumentException("Passed context must be an instance of type '{0}'.".FormatInvariant(typeof(SmartObjectContext)), nameof(context)); |
936 | 935 | } |
937 | 936 |
|
938 | | - var permissionSet = ctx.Set<PermissionRecord>(); |
939 | 937 | 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(); |
942 | 940 | var newPermissions = new Dictionary<string, PermissionRecord>(); |
| 941 | + var allRoles = ctx.Set<CustomerRole>().ToList(); |
943 | 942 | var adminRole = allRoles.FirstOrDefault(x => x.SystemName.IsCaseInsensitiveEqual("Administrators")); |
944 | 943 |
|
| 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 | + |
945 | 953 | var permissionToRoles = new Multimap<string, int>(StringComparer.OrdinalIgnoreCase); |
946 | 954 | foreach (var permission in allPermissions) |
947 | 955 | { |
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); |
949 | 961 | } |
950 | 962 |
|
951 | 963 | var oldPermissions = GetOldPermissions(); |
@@ -1174,6 +1186,12 @@ Multimap<string, string> GetOldPermissions() |
1174 | 1186 | } |
1175 | 1187 | } |
1176 | 1188 |
|
| 1189 | + public class OldPermissionRoleMapping |
| 1190 | + { |
| 1191 | + public int PermissionRecord_Id { get; set; } |
| 1192 | + public int CustomerRole_Id { get; set; } |
| 1193 | + } |
| 1194 | + |
1177 | 1195 | #endregion |
1178 | 1196 | } |
1179 | 1197 | } |
0 commit comments