پیدا نشدن razor page توسط dynamic Role

شهرام

عضویت : 1397/10/11 پرسش ها : 47 پاسخ ها : 31

پیدا نشدن razor page توسط dynamic Role

ارسال شده در : ‫۲ ماه قبل، سه شنبه ۱۶ مهر ۱۳۹۸، ساعت ۱۸:۵۸

با سلام خدمت استاد عزیز

من مشکلی که دارم اینه صفحه ادمین را با razor page زدم و از ایدنتیتی شما استفاده کردم . توی کنترلر هام مشکلی ندارم و دستور 
var descriptor = (ControllerActionDescriptor)actionDescriptor;
به درستی کار میکنه اما وقتی با حلقه for each به ریزور پیج ها میرسه ارور میده و خارج میشه . خواستم کمکم کنید . توی نت هم چیزی پیدا نکردم و همین سوالو دیدم خودتون هم توی گیت هاب پرسیده بودید. ولی من متوجه نشدم. با تشکر
 

سهیل علیزاده

عضویت : 1396/09/17 پرسش ها : 0 پاسخ ها : 74

(پاسخ صحیح)

ارسال شده در :‫۲ ماه قبل، سه شنبه ۱۶ مهر ۱۳۹۸، ساعت ۱۹:۲۹
0 تشکر

شهرام

عضویت : 1397/10/11 پرسش ها : 47 پاسخ ها : 31
ارسال شده در :‫۲ ماه قبل، سه شنبه ۱۶ مهر ۱۳۹۸، ساعت ۲۲:۵۰

ممنونم از پاسختان

این متد فقط Razor page  ها را بر میگرداند .ولی خیلی بهم کمک کرد.و ممنونم ازتون.من با اجازتون هر دورو ترکیب کردم و الان هم روی کنترلر و هم ریزور پیج کار میکند. با تشکر از لطفتان.

 

 private List<ActionDtoViewModel> GetDynamicPermissionActions()
        {
            var actions = new List<ActionDtoViewModel>();
            var pages = _actionDescriptor.ActionDescriptors.Items.OfType<PageActionDescriptor>().AsQueryable();
            foreach (var actionDescriptor in pages)
            {
                var name = _pageLoader.Load(actionDescriptor).HandlerTypeInfo.GetCustomAttributes<DisplayNameAttribute>().SingleOrDefault()?.DisplayName;
                var displayName = !string.IsNullOrWhiteSpace(name) ? name : actionDescriptor.DisplayName;

                var hasPermission = _pageLoader.Load(actionDescriptor).HandlerTypeInfo.GetCustomAttributes<AuthorizeAttribute>()
                    .Any(c => c.Policy == ConstantPolicies.DynamicPermission);
                
                if (hasPermission)
                {
                    actions.Add(new ActionDtoViewModel
                    {
                        
                        DisplayName = actionDescriptor.DisplayName,
                        DisplayCustomName = displayName,
                        RelativePath = actionDescriptor.AttributeRouteInfo.Name,
                        ViewEnginePath = actionDescriptor.ViewEnginePath,
                        AreaName = actionDescriptor.GetType().GetCustomAttribute<AreaAttribute>()?.RouteValue
                    });
                }

            }

            var actionDescriptors = _actionDescriptor.ActionDescriptors.Items.OfType<ControllerActionDescriptor>().AsQueryable();
            foreach (var actionDescriptor in actionDescriptors)
            {

                var descriptor = (ControllerActionDescriptor)actionDescriptor;
                var hasPermission = descriptor.ControllerTypeInfo.GetCustomAttribute<AuthorizeAttribute>()?
                                        .Policy == ConstantPolicies.DynamicPermission ||
                                    descriptor.MethodInfo.GetCustomAttribute<AuthorizeAttribute>()?
                                        .Policy == ConstantPolicies.DynamicPermission;

                if (hasPermission)
                {
                    actions.Add(new ActionDtoViewModel
                    {
                        ActionName = descriptor.ActionName,
                        ControllerName = descriptor.ControllerName,
                        ActionDisplayName = descriptor.MethodInfo.GetCustomAttribute<DisplayAttribute>()?.Name,
                        AreaName = descriptor.MethodInfo.GetCustomAttribute<AreaAttribute>()?.RouteValue
                    });
                }
            }


            return actions;
        }

 

0 تشکر

برای ارسال پاسخ باید وارد شوید و یا در سایت عضو شوید