首页 文章

使用多个角色提供程序授权属性

提问于
浏览
2

我正在构建一个ASP.NET MVC应用程序,它允许用户根据其选择连接到多个数据库之一(具有相同的模式) . 用户将在登录前选择数据库,然后针对该数据库进行身份验证 .

我已经为web.config添加了几个角色提供程序,每个角色提供程序都有一个与每个可用数据库对应的不同连接字符串 .

我知道我可以使用Roles.providers集合访问角色提供程序,但我不明白如何通过控制器中的[Authorize]属性选择哪个角色提供程序是用户

我的控制器看起来像这样:

namespace MyApp.Controllers
{
    [Authorize(Roles = "admin")]
    public class AdminController : Controller
    {

我假设这将检查用户角色与默认角色提供程序 . 如何在运行时选择将哪个角色提供程序用于[Authorize]属性?

1 回答

  • 1

    据我所知,没有办法做你的建议 . 属性是在运行时无法更改的静态元数据 . 但是,即使它不太方便,如果用户没有相应的角色,您可以通过重定向来完成您想要的任务:

    [Authorize]
    public class AdminController : Controller {
    
      public ActionResult ActionRequiringRoleFoo() {
        if( !User.IsInRole( "foo" ) ) return RedirectToAction( "InsufficientPrivileges" );
        return View();
      }
    

    如果要对控制器中的所有操作执行此操作,可以覆盖 OnActionExecuting 方法:

    protected override void OnActionExecuting( ActionExecutingContext filterContext ) {
      base.OnActionExecuting( filterContext );
      if( filterContext.ActionDescriptor.ActionName != "InsufficientPrivileges" && 
        !User.IsInRole( "anon" ) ) filterContext.Result = new RedirectResult( "InsufficientPrivileges" );
    }
    

    我希望有所帮助 .

相关问题