Asp.net 是否有实现MVC3动态角色控制器访问的软件包等?
我已经静态地允许使用角色的标准Authorize属性访问控制器/操作方法。我正在使用默认的ASP.Net成员资格提供程序 我们的一个客户需要更细粒度的访问控制。他们希望能够动态分配哪些角色可以访问哪些控制器/操作等。我看到的答案是实现CustomAuthorize属性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
只是想知道是否有任何工具包等。这似乎是一个合理的标准功能。我猜是这样的试试这样的自定义属性:
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中的成员资格和身份验证系统,而且由于任何更改都可能破坏现有的代码等,因此只有在有非常令人信服的理由时,他们才会这样做。简单的答案是,它不是功能集的一部分,任何第三方解决方案都需要特定的表结构,这将使大多数人难以在现有项目中使用,因此没有人创建第三方框架来实现这一点。