Asp.net自定义RoleProvider具有附加功能参数

时间:2013-01-15 15:11:49

标签: asp.net-mvc roleprovider

背景

我的ASP.net MVC应用程序的自定义成员资格和角色提供程序完美运行。但是,最近的一项要求意味着我必须修改角色提供程序以允许一些额外的功能。

与默认提供商不同(一个用户可以拥有多个角色,就是这样),我的新要求需要用户为每个公司设置不同的角色集合。因此,对于一家公司,一个用户帐户可能具有管理员权限,但对于另一家公司,该帐户可能只具有标准用户权限...为了实现这一点,我将使用另外一个直接绑定到我的应用程序数据中的2更换现有用户工作表结构和现有用户表。

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

Additional tables

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  

匹配签名。

     

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

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

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

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

希望有所帮助。

相关问题