0

我被赋予了将一个 asp 系统更新到 MVC3 的任务。我的主要问题是当前系统有两种不同的用户,每个用户都有自己的用户表,在当前的 asp 站点中,每个用户都由许多不同的会话持有变量定义。

因为其他系统使用两个不同的用户表,我无法合并它们。那么最好的前进方式是什么?

我最初考虑让它们在系统中分开;每个用户都有一个类类型,该类类型包含从它们的 asp 对应项镜像的单独变量。登录时,我可以将用户类型推送到 auth cookie 中的 userdata,然后在 IPrincipal 上创建一个扩展方法,以便在需要时返回用户类型。

这感觉有点骇人听闻,并且由于用户将查看相同的页面,因此会有很多重复的代码。

在用户存储库之前创建某种形式的外观会更好吗?它将一个角色附加到一个通用的用户对象上,该对象将识别系统中的用户类型?然后我可以检查这个角色并在需要时提取过去存储在会话变量中的数据。

4

4 回答 4

0

如果我有机会这样做,我会按照以下方式进行:

  1. 实施 asp.net 会员提供程序并将所有用户导入其中。
  2. 为用户类型创建两个不同的角色
  3. 使用配置文件提供程序存储用户类型表中的其他属性。

这样,您可以使用角色和配置文件的组合来处理与授权和限制相关的任何情况。

于 2011-11-23T12:37:04.747 回答
0

我将使用两个用户共有的方法定义一个接口,并让两种用户类型都实现该接口。所以,如果你有类似的东西:

interface IUser { bool CanViewPage1(); }
class UserType1 : IUser { }
class UserType2 : IUser { }

Session["user"] = new UserType1();

然后你可以这样做:

var user = (IUser)Session["user"];

对于常见操作:

if (user.CanViewPage1())
{ 
   ...
}

对于需要用户对象的操作:

bool CanViewPage2(IUser user)
{
   if(user is UserType1)
   {
       var ut1 = (UserType1)user;
       ...
   } else if (user is UserType2)
   {
       var ut2 = (UserType2)user;
       ...
   }
}

正如您所说,最后一部分也可以通过扩展方法完成。

于 2011-11-23T12:43:06.117 回答
0

我建议将 WIF 与自定义简单 STS 服务器一起使用,并对用户类型使用声明。 http://msdn.microsoft.com/en-us/library/ee748475.aspx

为了检查这些东西 - 使用自定义属性,或者简单 - Identity.HasClaim("someclaim name or type")。

此外,这将使您的身份验证/授权方法标准化,以后可以节省一些时间=)

于 2011-11-23T14:24:23.057 回答
0

如果我从头开始构建这个应用程序,我会按角色区分用户类型。考虑到这一点,我在用户构建器和代表之间创建了一个反腐败类。这会注入/删除一个角色(id 为 0)以区分用户类型。将来,客户希望合并表,所以这似乎是目前最明智的方法。

于 2011-11-25T12:31:41.373 回答