Authentication 授权和身份验证属性,其中权限必须来自MVC5中的数据库

Authentication 授权和身份验证属性,其中权限必须来自MVC5中的数据库,authentication,authorization,dynamic-programming,identity,asp.net-mvc-5,Authentication,Authorization,Dynamic Programming,Identity,Asp.net Mvc 5,在我的MVC应用程序中,我想授予超级管理员一个特权,以授权应用程序中的各个模块。为此,我有3个表: 角色 权限(即查看、创建、更改、删除)(存储模块ID和权限) ModuleMaster(存储ControllerName、ActionName) 现在我想过滤每个控制器及其操作,因为它在权限表中拥有权限。为此,我必须从数据库中获取值,然后发送到属性 但是我没有从这个动态授权工具中得到任何东西。最后,我得到了问题的解决方案。 为此,我添加了一个名为AuthorizeAttribute的新属性,该属性

在我的MVC应用程序中,我想授予超级管理员一个特权,以授权应用程序中的各个模块。为此,我有3个表:

  • 角色
  • 权限(即查看、创建、更改、删除)(存储模块ID和权限)
  • ModuleMaster(存储ControllerName、ActionName)
  • 现在我想过滤每个控制器及其操作,因为它在权限表中拥有权限。为此,我必须从数据库中获取值,然后发送到属性


    但是我没有从这个动态授权工具中得到任何东西。

    最后,我得到了问题的解决方案。 为此,我添加了一个名为AuthorizeAttribute的新属性,该属性继承AuthorizeAttribute,然后覆盖OnAuthorization。 首先,我创建了一个类,在该类中,我检查特定用户是否有权在返回true或false的特定控制器中访问调用的操作。 然后我在属性中调用了这个,如果用户角色具有特定操作的权限,那么将执行正常功能,但如果没有,则可以将其重定向到错误页面

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            var parameters = filterContext.ActionDescriptor.GetParameters();
            var values = parameters.Select(s => new
            {
                Name = s.ParameterName,
                Value = filterContext.HttpContext.Request[s.ParameterName]
            });
    
            string ControlerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            AppUser requestingUser = new AppUser(Convert.ToInt32(filterContext.RequestContext.HttpContext.Session["ssnRolekey"]));
            if (!requestingUser.HasPermission(oper, ControlerName))
                {
                    filterContext.Result = new RedirectToRouteResult(
                                               new RouteValueDictionary { 
                                                { "action", "UnauthorizedUser" }, 
                                                { "controller", "Account" } });
                }
        }
    
        public AttestAttribute( string permission)
        {
           this.oper = permission;
        }