Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 是否有实现MVC3动态角色控制器访问的软件包等?_Asp.net_Asp.net Mvc 3_Authorization_Security - Fatal编程技术网

Asp.net 是否有实现MVC3动态角色控制器访问的软件包等?

Asp.net 是否有实现MVC3动态角色控制器访问的软件包等?,asp.net,asp.net-mvc-3,authorization,security,Asp.net,Asp.net Mvc 3,Authorization,Security,我已经静态地允许使用角色的标准Authorize属性访问控制器/操作方法。我正在使用默认的ASP.Net成员资格提供程序 我们的一个客户需要更细粒度的访问控制。他们希望能够动态分配哪些角色可以访问哪些控制器/操作等。我看到的答案是实现CustomAuthorize属性 只是想知道是否有任何工具包等。这似乎是一个合理的标准功能。我猜是这样的试试这样的自定义属性: public class DynamicAuthorizeAttribute : AuthorizeAttribute { pr

我已经静态地允许使用角色的标准Authorize属性访问控制器/操作方法。我正在使用默认的ASP.Net成员资格提供程序

我们的一个客户需要更细粒度的访问控制。他们希望能够动态分配哪些角色可以访问哪些控制器/操作等。我看到的答案是实现CustomAuthorize属性


只是想知道是否有任何工具包等。这似乎是一个合理的标准功能。我猜是这样的

试试这样的自定义属性:

public class DynamicAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var controllerName = httpContext.Request.RequestContext.RouteData.Values["controller"];
        var actionName = httpContext.Request.RequestContext.RouteData.Values["action"];

        // Get this string (roles) from a database or somewhere dynamic using the controllerName and actionName
        Roles = "Role1,Role2,Role3"; // i.e.  GetRolesFromDatabase(controllerName, actionName);

        return base.AuthorizeCore(httpContext);
    }
}
只需将此属性放在任何需要授权的操作方法上,并使用控制器名称和操作名称在数据库中进行查找,即可获得所需的角色

希望这有帮助


标记尝试以下自定义属性:

public class DynamicAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var controllerName = httpContext.Request.RequestContext.RouteData.Values["controller"];
        var actionName = httpContext.Request.RequestContext.RouteData.Values["action"];

        // Get this string (roles) from a database or somewhere dynamic using the controllerName and actionName
        Roles = "Role1,Role2,Role3"; // i.e.  GetRolesFromDatabase(controllerName, actionName);

        return base.AuthorizeCore(httpContext);
    }
}
只需将此属性放在任何需要授权的操作方法上,并使用控制器名称和操作名称在数据库中进行查找,即可获得所需的角色

希望这有帮助


Mark

任何此类解决方案都必须过于详细,无法在框架中轻松提供。只有您知道表的布局,以及如何进行身份验证和授权。例如,您将动态信息存储在哪些表中?我认为这是可能的。Microsoft创建了所有用于用户管理的标准表,为什么不用于基于角色的动态操作/控制器。我只需要所有站点都受到Role动态限制的操作/控制器。我认为将其中一个custome Authority解决方案带到那里并修改它以适应您的问题会更容易。当然,这是“可能的”,但任何解决方案都是如此。自2.0以来,微软没有改变.NET中的成员资格和身份验证系统,而且由于任何更改都可能破坏现有的代码等,因此只有在有非常令人信服的理由时,他们才会这样做。简单的回答是,它不是功能集的一部分,任何第三方解决方案都需要特定的表结构,这将使大多数人难以在现有项目中使用,因此,没有人创建第三方框架来实现这一点。任何此类解决方案都必须过于详细,无法在框架中轻松提供。只有您知道表的布局,以及如何进行身份验证和授权。例如,您将动态信息存储在哪些表中?我认为这是可能的。Microsoft创建了所有用于用户管理的标准表,为什么不用于基于角色的动态操作/控制器。我只需要所有站点都受到Role动态限制的操作/控制器。我认为将其中一个custome Authority解决方案带到那里并修改它以适应您的问题会更容易。当然,这是“可能的”,但任何解决方案都是如此。自2.0以来,微软没有改变.NET中的成员资格和身份验证系统,而且由于任何更改都可能破坏现有的代码等,因此只有在有非常令人信服的理由时,他们才会这样做。简单的答案是,它不是功能集的一部分,任何第三方解决方案都需要特定的表结构,这将使大多数人难以在现有项目中使用,因此没有人创建第三方框架来实现这一点。