فهرست منبع

Fixed visibility of one to many and many to many pages based on security token

Kenric Nugteren 6 ماه پیش
والد
کامیت
abfcbdc8ae
1فایلهای تغییر یافته به همراه18 افزوده شده و 5 حذف شده
  1. 18 5
      inabox.wpf/DynamicGrid/DynamicGridUtils.cs

+ 18 - 5
inabox.wpf/DynamicGrid/DynamicGridUtils.cs

@@ -159,7 +159,14 @@ public static class DynamicGridUtils
             }
             _manytomanytomanypages[type] = pageTypes.ToArray();
         }
-        pages.AddRange(pageTypes.Select(x => (Activator.CreateInstance(x) as IDynamicEditorPage)!));
+        foreach(var pageType in pageTypes)
+        {
+            var entityType = pageType.GetSuperclassDefinition(typeof(DynamicGrid<>))!.GenericTypeArguments[0];
+            if (Security.CanView(entityType))
+            {
+                pages.Add((Activator.CreateInstance(pageType) as IDynamicEditorPage)!);
+            }
+        }
     }
 
     public static IEnumerable<Type> GetOneToManyTypes(Type type)
@@ -187,7 +194,6 @@ public static class DynamicGridUtils
             {
                 if (ClientFactory.IsSupported(map))
                 {
-
                     _allo2mpages ??= CoreUtils.Entities.Where(
                             x =>
                                 x.IsClass
@@ -217,7 +223,14 @@ public static class DynamicGridUtils
 
             _onetomanypages[type] = pageTypes.ToArray();
         }
-        pages.AddRange(pageTypes.Select(x => (Activator.CreateInstance(x) as IDynamicEditorPage)!));
+        foreach(var pageType in pageTypes)
+        {
+            var entityType = pageType.GetSuperclassDefinition(typeof(DynamicGrid<>))!.GenericTypeArguments[0];
+            if (Security.CanView(entityType))
+            {
+                pages.Add((Activator.CreateInstance(pageType) as IDynamicEditorPage)!);
+            }
+        }
     }
 
     public static void LoadCustomEditorPages(Type type, DynamicEditorPages pages)
@@ -655,7 +668,7 @@ public static class DynamicGridUtils
     /// <param name="customiseGrid"></param>
     /// <returns></returns>
     public static bool EditEntity<T>(T item, Func<Type, CoreTable?>? pageDataHandler = null, bool preloadPages = false, Action<DynamicGrid<T>>? customiseGrid = null)
-        where T : Entity, new()
+        where T : BaseObject, new()
     {
         var grid = CreateDynamicGrid<T>(typeof(DynamicGrid<>));
         customiseGrid?.Invoke(grid);
@@ -672,7 +685,7 @@ public static class DynamicGridUtils
     /// <param name="customiseGrid"></param>
     /// <returns></returns>
     public static bool EditEntities<T>(T[] items, Func<Type, CoreTable?>? pageDataHandler = null, bool preloadPages = false, Action<DynamicGrid<T>>? customiseGrid = null)
-        where T : Entity, new()
+        where T : BaseObject, new()
     {
         var grid = CreateDynamicGrid<T>(typeof(DynamicGrid<>));
         customiseGrid?.Invoke(grid);