2

我想将我的自定义权限系统粘合到一个新的 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 中调用我自己的自定义方法是不可能的吗?

4

2 回答 2

3

您可以将角色提供者转换为您的自定义类型,这将使​​您能够访问您的方法。因为您的功能在接口之外,所以这将您的应用程序与您的角色提供者紧密耦合 - 这可能适合您的目的。

    RoleProvider rp = Roles.Provider;
    (rp as MyRoleProvider).GetPermissions(privateKey,userName);
于 2010-02-08T18:10:46.677 回答
1

我认为应该是:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
于 2011-03-29T13:26:27.710 回答