Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理具有多种用户类型的系统的最佳方法是什么?_C#_Asp.net Mvc 3_Roles_User Management - Fatal编程技术网

C# 处理具有多种用户类型的系统的最佳方法是什么?

C# 处理具有多种用户类型的系统的最佳方法是什么?,c#,asp.net-mvc-3,roles,user-management,C#,Asp.net Mvc 3,Roles,User Management,我的任务是将asp系统更新为MVC3。我的主要问题是,当前系统有两种不同类型的用户,每个用户都有自己的用户表,在当前asp站点中,每个用户都由许多不同的会话变量定义 因为其他系统使用两个不同的用户表,所以我无法合并它们。那么,前进的最佳途径是什么 我最初想让它们在系统中分开;为每个用户提供一个类类型,该类类型包含从asp对应项镜像的单独变量。登录时,我可以将用户类型推送到auth cookie中的userdata,然后在IPrincipal上创建一个扩展方法,在需要时返回用户类型 这感觉有点像黑

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

因为其他系统使用两个不同的用户表,所以我无法合并它们。那么,前进的最佳途径是什么

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

这感觉有点像黑客,因为用户将查看相同的页面,所以会有大量代码重复


在用户存储库之前创建某种形式的facade会更好吗?它会将角色附加到一个公共用户对象,该对象将标识系统中的用户类型?然后,我可以检查此角色,并在需要时取出以前存储在会话变量中的数据。

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

  • 实现asp.net成员资格提供程序并将所有用户导入其中
  • 为用户类型创建两个不同的角色
  • 使用配置文件提供程序存储用户类型表中的其他属性

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

    我将使用两个用户通用的方法定义一个接口,并让两种用户类型实现该接口。因此,如果您有以下情况:

    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;
           ...
       }
    }
    

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

    我建议将WIF与自定义简单STS服务器一起使用,并对用户类型使用声明。

    要检查这些内容,请使用自定义属性或simple-Identity.HasClaim(“someclaim名称或类型”)


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

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

    嗨,Prashant,我很想这样做,但我需要使用现有的表,不能以任何方式修改它们-这是合同的规定。好的,那么你需要一个小技巧来扩展提供程序以从你的表中读取数据。我确信它们是可扩展的,你可以得到一些很好的例子。如果我从头开始构建这个应用程序,我会根据角色区分用户类型。考虑到这一点,我在用户生成器和代表之间创建了一个反腐败类。这将插入/删除角色(id为0)以区分用户类型。在将来,客户机希望合并表,因此这似乎是目前最明智的方法。