我想我的自定义的权限管理系统粘合到一个新的ASP.NET MVC应用程序。我做的工作写我自己的自定义AuthorizeAttribute的应用相当数量。我也写我自己的自定义的MembershipProvider和RoleProvider实现。所有这些精美的作品,直到我需要检查我的角色是用户的一部分。 我没有这一切,所以我可以简单地这样做对我的控制器,和我以前在VS2010默认MVC模板复古适合我的代码为原型的:

[CustomAuth(Roles='X')]
public ActionResult DoSomething()

我的定制系统有点古怪虽然。我不叫成SQL数据库。这是一个简单的Web服务,它提供3种方法:CheckPassword,GetPermissions,WebLogin。 WebLogin简单地包装了CheckPassword和GetPermissions到一个通话中。当使用WebLogin从内部的ValidateUser没有工作,我叫TestPassword从内MembershipProvider.ValidateUser(用户名,密码),当这个电话全成我会找回用户名,否则它会失败,我会得到一个NULL。

问题是,当我打电话到我的实现RoleProvider的。以用户名的单个参数定义GetRolesForUser抽象类。我GetPermissions()方法需要多于一个用户名的工作。它被定义像这样:

GetPermissions(privateKey,userName)

显然,从以下RoleProvider方法中调用,这是行不通的。我无法通过专用密钥到受支持开箱的方法。

public override string[] GetRolesForUser(string username)

时不可能我自己的自定义RoleProvider内摆脱打电话给我自己的自定义方法?

有帮助吗?

解决方案

您可以施展的作用提供商作为您的自定义类型,这将会给你的方法,你的访问。因为你的函数接口之外,虽然,这个紧密结合您的应用程序到你的角色提供 - 这可能是你的目的精细

    RoleProvider rp = Roles.Provider;
    (rp as MyRoleProvider).GetPermissions(privateKey,userName);

其他提示

我认为它应该是:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top