通过dnn了解membership的使用

  记得差不多两年前跟同学聊天时他说vs2005的工具箱中加入了登录控件,当时想ms真是变态,连这个都替程序员做好了,照这样发展下去做应用开发的程序员还算程序员吗,这两年我一直停留在.framework1.1上,为了学习dnn4x才装了vs2005,了解了dnn中的membership才明白它的意义不止登录控件那么肤浅。
  这两年中接触了一些业务系统,用户和我们都很头疼的一个问题是系统的整合,每个系统都有自己的用户和权限模块,用户使用这些系统需要分别登录这些系统,当然不乐意了。“要单点登录!从门户系统中进去后可以直接进入其它业务系统 ”由于这些业务系统是不同公司不同时期做的,这个单点登录搞起来也不是那么容易,都想以自己为标准,听谁的?不管怎样单点登录还是艰难的实现了。
  随着业务系统的增多,用户抱怨了:“每个系统中都要建同样的用户,这样不行,要统一用户,都不要建用户了,统一的从一个地方读取” 呵呵,“同一个世界,同一个梦想” 毕竟是梦想啊,要让这些运行了几年的系统统一到一个标准下还不如推倒重来呢。当时想,要是当时在这些公司做的时候用户提出这样的要求:我们定义了一套用户表,你们不要建用户了,从这取吧。那么“同一个集团,同一套用户”还有可能。
  我觉得membership的意义就在于此,由微软这个层次出了一个标准,(可基于数据库或目录服务)基于这个标准的系统能很容易的实现用户的统一和单点登录。
  dnn中也有它自己的用户表,在建立用户的时候在dnn的users表和membership的aspnet_users、aspnet_membership中都写入了用户记录,删除的时候两边同时删除,
 dnn中没有利用membership的角色表,它用的是自己的角色表,基本上dnn上是利用了membership的登录验证和把用户统一到membership的标准下。
  我认为dnn利用自己的角色表来进行角色的管理是很合理的,角色或组的划分是反映了某个业务系统对用户的抽象,不同的业务系统的划分是不一样的,也不应该统一,合理的做法是保持用户的统一,用户怎么分组划部门社么的还应该在具体的业务系统中进行控制。
  dnn是门户系统,其它业务模块以它为标准,所以dnn与membership紧耦合也没什么关系,如果有其他同级别的系统那么用户的管理(新增、删除)就应该完全独立出来了,要不你这边删用户的同时把membership中的也删了,而其他系统还要用,那不就乱了套了吗?

aspnetMembershipProvider.vb中的CreateUser函数片段:(建用户用户同步)

     ' If new user - add to aspnet membership
                If createStatus  =  UserRegistrationStatus.AddUser Then
                    createStatus 
=  CreateMemberhipUser(user)
                End If

                
' If asp user has been successfully created or we are adding a existing user
                 ' to a new portal 
                If createStatus  =  UserCreateStatus.Success OrElse createStatus  =  UserCreateStatus.AddUserToPortal Then
                    
' Create the DNN User Record
                    createStatus  =  CreateDNNUser(user)

aspnetMembershipProvider.vb中的DeleteUser函数片段:(删用户用时删)

   ' check if user exists in any other portal
                dr  =  dataProvider.GetUserByUsername( - 1 , user.Username)
                dr.Read()
                If Not dr.Read Then
                    dataProvider.DeleteUser(user.UserID)

                    
' Delete AspNet MemrshipUser
                    retValue  =  DeleteMembershipUser(user)
                Else
                    dataProvider.DeleteUserPortal(user.UserID, user.PortalID)
                End If
                dr.Close()

   听了黄灿的《黄玫瑰》感觉很不错,清新脱俗,推荐一下了,呵呵


 

你可能感兴趣的:(IP)