c# - 如何将多个值传递给 MVC 应用程序中的自定义 RoleProvider GetUserRoles 方法?

标签 c# asp.net-mvc roleprovider custom-membershipprovider

我想将我的自定义权限系统粘合到新的 ASP.NET MVC 应用程序中。我已经做了相当多的工作,为应用程序编写自己的自定义 AuthorizeAttribute。我还编写了自己的自定义 MembershipProvider 和 RoleProvider 实现。所有这些工作都很顺利,直到我需要检查我的用户所属的角色。 我做了这一切,所以我可以简单地在我的 Controller 上执行此操作,并且我使用 VS2010 中的默认 MVC 模板来改造我的代码作为原型(prototype):

[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 中调用我自己的自定义方法?

最佳答案

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

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

关于c# - 如何将多个值传递给 MVC 应用程序中的自定义 RoleProvider GetUserRoles 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2223741/

相关文章:

c# - Facebook 的社交登录在 ASP.Net MVC 5 项目中不起作用

asp.net - 使用带有自定义角色提供程序的 ASP.NET MVC 4 登录失败时不会出现错误消息?

asp.net-mvc - MVC Core 表单标签帮助器继承当前 View URL 的操作属性

c# - Asp 身份和特定于应用程序的模型

c# - ASP.NET:检索页面的授权角色

asp.net 自定义角色提供程序 nhibernate 错误

c# - 将控制台应用程序窗口置于前面代码解释

c# - Web Api 2 RESTFUL 图片上传

c# - 如何创建由 5 个子图组成的图表

c# - LINQ:获取数组中每个字符串的第一个字符