【问题标题】:Asp.net Custom RoleProvider with additional function parameters带有附加函数参数的 Asp.net 自定义 RoleProvider
【发布时间】:2012-12-29 17:25:47
【问题描述】:

背景

我的 ASP.net MVC 应用程序有一个自定义的成员资格和角色提供程序,它运行良好。然而,最近的要求意味着我必须修改角色提供程序以允许一些额外的功能。

与默认提供者不同(一个用户可以拥有多个角色,仅此而已),我的新要求需要用户在每个公司拥有不同的角色集合。因此,对于一家公司,用户帐户可能具有管理员权限,但对于另一家公司,该帐户可能仅具有标准用户权限...为此,我将现有的 usersinrole 表替换为直接与我的应用程序数据相关的另外 2 个表结构和现有的用户表。

这是另外 2 个表以及它们如何适应架构。

原则上,这正是我所需要的,但我需要修改自定义角色提供程序中的一些功能,以包含一个参数,以启用每个公司的用户角色检查。。 p>

在尝试进行这些修改并添加附加参数时,出现以下错误:

'Public Overrides Function IsUserInRole(username As String, rolename As String, [companyID As Integer = 0]) As Boolean' cannot override 'Public MustOverride Function IsUserInRole(username As String, roleName As String) As Boolean' because they differ by optional parameters.

问题

这是有道理的,因为我的自定义角色提供程序继承自默认 RoleProvider 类,但我如何(如果可能的话)解决这个问题并将公司 ID 传递给所需的函数?

【问题讨论】:

    标签: asp.net-mvc roleprovider


    【解决方案1】:

    规则部分中Overrides的文档表明:

    匹配签名。

    此声明的签名必须与 它覆盖的属性或过程。这意味着参数 列表必须具有相同数量的参数,以相同的顺序, 相同的数据类型。除了签名之外,覆盖 声明还必须与以下内容完全匹配:

    • 访问级别
    • 返回类型,如果有的话

    这种僵化可能意味着您必须使用备用名称(可能是IsUserInRoleForCompany)编写一个方法,然后重构您的代码以调用该方法而不是IsUserInRole。不理想,但无论如何您都必须重构每个调用以添加新参数。

    作为替代方案,您可以考虑以一种允许您从缓存(或 cookie 或其他)中检索该值的方式缓存当前用户的 CompanyID,然后在 IsUserInRole 中使用它 - 否定您需要将其传递为一个参数,从而解决了刚性问题。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 2019-01-23
      相关资源
      最近更新 更多