VB.NET数据库操作核心sdk-第01篇---安全身份验证基类

本文介绍了VB.NET数据库操作的核心安全身份验证基类的重要性和设计思路。首先阐述了建立安全身份验证基类的原因,包括提高安全性、设置不同授权等级以及方便后续授权扩展。接着详细说明了授权等级的设置,以及身份验证类库的设计,包括用户名、授权信息、校验码等属性。此外,还提到了泛型在方法设置中的应用,以及如何防止非授权用户调用。最后,文章预告了后续关于数据库操作类库的讲解。
摘要由CSDN通过智能技术生成

1、安全身份验证基类重要性

为何要在讲解数据库操作核心类库前,需要讲解此基类。主要是基于以下几个因素:

  • 相对安全性

既然是核心数据库操作类库,很大程度上,并不希望无关人员调用此类库,尤其是在企业内部或者第三方开发的应用程序被其他用户调用。

  • 授权等级

同一团队合作中,为了管控每个用户的使用数据库操作等级。例如某个开发用户A,可从此类库调用的函数,只能是读取数据库,删除和更新则没有;某个开发用户B,可以调用此类库的读取、更新等操作数据库的函数,但函数提供的参数不一样,不可使用事务操作。

  • 后续授权扩展可用性

此基类,可以让其他类库继承,并不一定只限制与操作数据库的内容;有些类库只属于核心团队调用;有些类库是普通团队也可以,各自开发组群根据各自需要自行设置安全等级参数。

2、授权等级设置

设置一个授权等级的枚举类型:

    ''' <summary>
    ''' 说明:授权等级      
    ''' </summary>
    ''' <remarks></remarks>
    Public Enum EmpowerLevel
        A = 1
        B = 2
        C = 3
        D = 4
        E = 5
        F = 6
        Z = 50
    End Enum

授权等级从A-Z,意味着从高到低,授权等级越高,今后涉及到开发类库中,可调用的函数会越多。

如果你想A1,A2,A3怎么设置也一样,这个只是为了今后调用方案,统一这么设置。内部开发团队了解就ok,只是一个操作规范而已。

3、身份验证类库设计思路

属性信息设置

  • 用户名

我们需要提高给开发用户一个账户,也是其唯一用户ID

  • 授权信息

此用户授权信息是加密的信息,判断用户是否被授权调用此类库

  • 校验码

此校验码,是在授权验证通过,提取用户的授权等级

  • 授权验证通过

授权验证完毕后,返回一个属性,记录通过还是不通过,如果不通过,则直接强制退出

  • 授权等级

最后验证完毕后,返回授权等级

  • 返回信息

如果验证失败,则返回提示信息

方法设置

  • 授权校验函数

对于授权码的验证,确定是否授权,授权通过,则返回授权验证通过

  • 获取授权等级函数

在授权验证通过后,根据校验码,返回授权等级。

设计参数类型

为了类型使用并不确定,也为方便操作,此基类的相关参数采用泛型。

主要是定义http://VB.NET泛型类型时,即使用一个或多个数据类型将其参数化。这样可允许使用代码定制数据类型以满足其要求。代码可以通过泛型元素声明若干个不同的编程元素,每个元素可使用一组不同的数据类型。但是,无论声明的元素使用哪些数据类型,它们均执行相同的逻辑。

具体介绍,可以参考VB.net学习笔记(十九)数组、集合、泛型 ,里面讲的不错。当然也可以在百度里搜索下VB.NET 泛型

基本的思路已经构造完毕,剩下编写代码

    ''' <summary>
    ''' 创建时间:2019.8.10
    ''' 作者: kevin zhu 
    ''' 说明:安全身份验证基类,继承此基类的子类要重写    
    ''' </summary>
    ''' <typeparam name="T">泛型参数,可以是用户ID</typeparam>
    ''' <typeparam name="V">泛型参数,默认是类授权码</typeparam>
    ''' <typeparam name="P">泛型参数,默认是过程及函数授权码</typeparam>
    ''' <remarks></remarks>
    Public MustInherit Class SecuriVerify(Of T, V, P)
#Region "基类相关参数"


        ''' <summary>
        ''' 说明:授权用户名  
        ''' </summary>
        ''' <remarks>只能程序集里访问</remarks>
        Friend MUserName As T '//用户名
        ''' <summary>
        ''' 说明: 类使用的授权码  
        ''' </summary>
        ''' <remarks>只能程序集里访问</remarks>
        Friend MSecuriKey As V '//类授权码 
        ''' <summary>
        ''' 说明:类里面的函数及过程调用的授权码  
        ''' </summary>
        ''' <remarks>只能程序集里访问</remarks>
        Friend MProcKey As P '//类中函数及过程授权码
        ''' <summary>
        ''' 说明:身份验证通过与否标记  
        ''' </summary>
        ''' <remarks>程序集或派生类可以访问</remarks>
        Protected MSecuriPass As Integer
        ''' <summary>
        ''' 说明:'//过程及函数授权等级  
        ''' </summary>
        ''' <remarks>只能在程序集或者派生类中访问</remarks>
        Protected MProcLevel As EmpowerLevel
        ''' <summary>
        ''' 说明:错误信息记录  
        ''' </summary>
        ''' <remarks></remarks>
        Public MErrMessage As String
#End Region
#Region "基类相关属性"


        ''' <summary>
        ''' 说明:返回过程及函数使用的等级  
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Protected MustOverride ReadOnly Property ProcLevel As EmpowerLevel

        ''' <summary>
        ''' 说明: 类调用前身份验证是否通过。1=通过,0=不通过  
        ''' </summary>
        ''' <value></value>
        ''' <returns></returns>
        ''' <remarks>未通过,则无法使用调用类</remarks>
        Protected MustOverride ReadOnly Property SecuriPass As Integer '//验证码是否通过。1=通过,0=不通过
        Public MustOverride ReadOnly Property ErrMessage As String '//错误信息反馈

#End Region
        ''' <summary>
        ''' 说明:有些类确实需要不带参数的构造函数  
        ''' </summary>
        ''' <remarks>程序集内部可以访问</remarks>
        Friend Sub New()
            MSecuriPass = 0
            MProcLevel = EmpowerLevel.Z
            MErrMessage = ""
        End Sub
        ''' <summary>
        ''' 说明: 声明的构造函数保证了外部程序集不可继承该类   
        ''' </summary>
        ''' <remarks></remarks>
        Friend Sub New(ByVal vUserName As T, ByVal vSecuriKey As V, ByVal vProcKey As P)

            MSecuriPass = 0
            MProcLevel = EmpowerLevel.Z
            MErrMessage = ""
            Try
                MUserName = vUserName
                MSecuriKey = vSecuriKey
                MProcKey = vProcKey

                MSecuriPass = CheckCode(MUserName, MSecuriKey)
                If MSecuriPass = 0 Then
                    ExportMessage("Error-1<未被授权无法调用>")
                    Exit Sub
                End If
                '//进行过程及函数授权等级获取 
                MProcLevel = ProcPermission(vProcKey)
            Catch ex As Exception
                ExportMessage(ex.Message)

                Exit Sub
            End Try

        End Sub

#Region "基类相关函数及过程"


        ''' <summary>
        ''' 说明:身份验证函数,输入用户及验证码确认无误后。返回值1,否则返回值0   
        ''' </summary>
        ''' <param name="vUserName">用户名</param>
        ''' <param name="vCode">验证码</param>
        ''' <returns>验证通过1,不通过=0</returns>
        ''' <remarks>当前函数子类内部可以访问</remarks>
        Friend MustOverride Function CheckCode(vUserName As T, vCode As V) As Integer
        ''' <summary>
        ''' 说明:过程及函数调用前的验证。根据验证码返回使用等级,不同函数及过程划分几个使用等级  
        ''' </summary>
        ''' <param name="vCode">函数及过程授权码</param>
        ''' <returns></returns>
        ''' <remarks>当前函数子类内部可以访问</remarks>
        Friend MustOverride Function ProcPermission(vCode As P) As EmpowerLevel

#End Region
    End Class

代码解释:

其中CheckCode和ProcPermission函数声明成friend,其实是考虑是基类,继承子类要重写,friend函数只能同类库中调用,隐藏类库,防止外部用户调用。

此基类+后续编译加密,可以防止非授权用户调用。

类库代码发布在github, 有兴趣的朋友可以下载,帮忙点个赞。

后续还要分篇讲解类库数据库操作的部分,敬请期待,保持关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值