2

背景

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

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

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

附加表

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

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

'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 传递给所需的函数?

4

1 回答 1

0

Overrides名为“规则”的部分中的文档表明:

匹配签名。

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

  • 访问级别
  • 返回类型(如果有)

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

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

希望有帮助。

于 2013-05-19T05:37:06.227 回答