我想将我的自定义权限系统粘合到一个新的 ASP.NET MVC 应用程序中。我已经为应用程序编写了自己的自定义 AuthorizeAttribute 做了大量工作。我还编写了自己的自定义 MembershipProvider 和 RoleProvider 实现。在我需要检查我的用户所属的角色之前,所有这些都非常有效。我做了所有这些,所以我可以简单地在我的控制器上执行此操作,并且我使用 VS2010 中的默认 MVC 模板将我的代码改装为原型:
[CustomAuth(Roles='X')]
public ActionResult DoSomething()
不过,我的自定义系统有点古怪。我不调用 SQL 数据库。它是一个简单的 Web 服务,提供 3 种方法:CheckPassword、GetPermissions、WebLogin。WebLogin 只是将 CheckPassword 和 GetPermissions 包装到一个调用中。当在 ValidateUser 中使用 WebLogin 不起作用时,我从 MembershipProvider.ValidateUser(userName,password) 中调用了 TestPassword,当这个调用成功时,我会取回 UserID,否则它会失败,我会取回 NULL。
问题是当我调用 RoleProvider 的实现时。抽象类使用单个参数 userName 定义了 GetRolesForUser。我的 GetPermissions() 方法需要多个用户名才能工作。它是这样定义的:
GetPermissions(privateKey,userName)
显然,从以下 RoleProvider 方法中调用它是行不通的。我无法将 privateKey 传递给开箱即用支持的方法。
public override string[] GetRolesForUser(string username)
从我自己的自定义 RoleProvider 中调用我自己的自定义方法是不可能的吗?