zoukankan      html  css  js  c++  java
  • 通用权限的一些整理思考

    通用权限是一个比较古老的话题,从有软件系统开始,就有权限管理,但是真正要实现一个通用的细粒度、高可用、高扩展性的完整权限管理系统,并不是一件简单的事情。

    本文只是一个引子,文字不多,但要真正理解还是需要仔细琢磨,需要的不妨Mark,在真正做权限的时候,思考得比较详细的时候再反过来看看,也许会有一些收获。

    先上图,图比较大,请放大后查看。(右击图片,在新标签页中查看,点击放大图标,查看原始图)

    再上数据字典,基本上考虑了上图的所有权限设计点,具体如何在数据库设计中体现,请自行思考,后续整个系统开发完成后,有精力时再重新完整梳理一遍。

    以下数据字典由软件pdmreader(可从http://www.pdmreader.com/下载)从PDM转换,转换过程字段名被全部自动转换为了大写,单不影响理解。

    信息

    项目名称

    通用权限管理

    数据库类型

    Sqlserver 2012

    表数量

    10

    更新日期

    2017年10月21日


    数据表清单:

    表名

    解释

    DATAITEM

    数据项(DataItem)

    EMPINFO

    雇员信息(EmpInfo)

    ICONITEM

    图标项(IconItem)

    MODULEPAGE

    模块页面项(ModulePage)

    ORGINFO

    组织机构(OrgInfo)

    RIGHTITEM

    权限项(RightItem)

    RIGHTMAP

    权限映射(RightMap)

    ROLEINFO

    角色信息(RoleInfo)

    SYSTEMITEM

    系统项(SystemItem)

    USERINFO

    用户信息(UserInfo)


    表名:DATAITEM

    解释:数据项(DataItem)
    备注: 数据项
    数据行、列 权限来自于DLL
    数据项和系统没有直接关系,由Page关联
    一个数据项可属于多个系统
    数据权限筛选器
    比如:我添加的、自己部门的、
    自己门店的、上一个月的、
    张三和王五的

    DATAITEM(数据项(DataItem))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    DATAKEY

    数据项标识

    NVARCHAR(50)

    50

         

    数据项标识

     

    DATANAME

    数据权限名称

    NVARCHAR(50)

    50

         

    数据权限名称

     

    DATAKIND

    数据类型

    INT

         

    0

    数据类型

    ①列表②实体,当前只支持列表,以后可能会有其它类型

     

    RIGHTKIND

    权限类型

    INT

           

    权限类型

    ①行权限②列权限③单元格权限(单元格由RilterRules和OwnColumns共同决定)

     

    TARGETMODEL

    目标模型

    NVARCHAR(1000)

    1000

       

    ''

    目标模型

    对应实体全名

     

    FILTERRULES

    权限过滤规则

    NVARCHAR(1000)

    1000

       

    ''

    权限过滤规则

    序列化后的FilterRule树,在业务层实现反序列化、上下文替换、注入过滤、SQL集成

     

    OWNCOLUMNS

    拥有的列

    NVARCHAR(1000)

    1000

       

    拥有的列

     

    OWNRIGHTS

    拥有的操作

    NVARCHAR(1000)

    1000

       

    ''

    拥有的操作

    对应到有权限的行上能进行哪些操作,比如一个页面可查看的和可修改的可以分开定义数据权限

     

    SORTCODE

    排序码

    INT

         

    0

    排序码

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

     

    STATES

    状态

    INT

         

    0

    状态

    当前只有在用状态

    [返回]


    表名:EMPINFO 解释:雇员信息(EmpInfo)
    备注: 雇员信息

    EMPINFO(雇员信息(EmpInfo))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    EMPKEY

    雇员主键

    NVARCHAR(50)

    50

         

    雇员主键

     

    EMPKIND

    雇员类型

    INT

           

    雇员类型

    正式员工、试用员工、外聘人员、实习人员等

     

    ORGKEY

    所属机构

    NVARCHAR(50)

    50

         

    所属机构

     

    JOINTIME

    入职时间

    DATETIME

           

    入职时间

     

    JOBLEVEL

    职级

    NVARCHAR(50)

    50

       

    ''

    职级

    初级、中级、高级

     

    JOBPOSITION

    职位

    NVARCHAR(50)

    50

       

    -1

    职位

    软件工程师、设计师、安装工、生产工人

     

    JOBTITLE

    职称

    NVARCHAR(50)

    50

       

    ''

    职称

    职称=职级+职位,比如高级软件工程师、高级设计师等

     

    JOBWORKS

    工作

    NVARCHAR(1000)

    1000

       

    ''

    工作

    App开发、后端开发、UI设计、橱柜安装、衣柜安装、开料、包装

     

    TAGS

    标签

    NVARCHAR(1000)

    1000

       

    ''

    标签

    余料字段

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    STATES

    状态

    INT

         

    0

    状态

    [返回]


    表名:ICONITEM 解释:图标项(IconItem)
    备注: 图标项

    ICONITEM(图标项(IconItem))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    ICONKEY

    图标键

    NVARCHAR(50)

    50

         

    图标键

     

    ICONNAME

    图标名称

    NVARCHAR(100)

    100

         

    图标名称

     

    ICONKIND

    图标类型

    INT

           

    图标类型

    1流、2文件、3字体

     

    ICONFILEKIND

    文件类型

    INT

           

    文件类型

    1字体、2svg、3ico、4png、5jpg、6gif

     

    ICONCONTENT

    图标二进制内容

    IMAGE

           

    图标二进制内容

     

    ICONURL

    文件路径

    NVARCHAR(1000)

    1000

         

    文件路径

     

    ICONFONT

    字体名称

    NVARCHAR(50)

    50

         

    字体名称

     

    ICONLENGTH

    长度

    INT

         

    0

    长度

     

    ICONWIDTH

    宽度

    INT

         

    0

    宽度

     

    USEKIND

    使用类型

    INT

           

    使用类型

    1任务单图标、2菜单图标、3按钮图标

     

    GROUPIC

    分组标识

    NVARCHAR(50)

    50

       

    ''

    分组标识

    默认无分组,则空

     

    TAGS

    标签

    NVARCHAR(1000)

    1000

       

    ''

    标签

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    SORTCODE

    排序码

    INT

         

    0

    排序码

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

     

    STATES

    状态

    INT

         

    0

    状态

    在用、停用、移除

    [返回]


    表名:MODULEPAGE 解释:模块页面项(ModulePage)
    备注: 模块页面项
    Marks:
    相当于给页面附加一系列包含标记或排除标记
    辅助数据权限和操作权限验证

    可以理解为系统结构
    System
         Modules
             Groups
                  Menu1---Rights、Datas、Marks
                  Menu2---Rights、Datas、Marks
                 ……
             

    MODULEPAGE(模块页面项(ModulePage))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    ITEMKEY

    项主键

    NVARCHAR(50)

    50

         

    项主键

     

    ITEMKIND

    项类型

    INT

           

    项类型

    1子系统、2模块、3组、4web菜单、5win菜单……

     

    ITEMNAME

    项名称

    NVARCHAR(50)

    50

         

    项名称

     

    ITEMCODE

    项编码

    NVARCHAR(50)

    50

         

    项编码

     

    ITEMPATH

    项路径

    NVARCHAR(1000)

    1000

       

    ''

    项路径

     

    ITEMICON

    项图标

    NVARCHAR(100)

    100

       

    ''

    项图标

     

    ISMENU

    是否是菜单

    BIT

         

    0

    是否是菜单

     

    SYSTEMKEY

    所属子系统

    NVARCHAR(50)

    50

         

    所属子系统

     

    MODULEKEY

    模块主键

    NVARCHAR(50)

    50

       

    ''

    模块主键

     

    PARENTKEY

    上级主键

    NVARCHAR(50)

    50

       

    0

    上级主键

     

    CHILDKEYS

    所有直属子级标识

    NVARCHAR(MAX)

         

    ''

    所有直属子级标识

    排序使用,逗号分隔的字符串列表

     

    PARENTKEYS

    所有父级标识

    NVARCHAR(MAX)

         

    ''

    所有父级标识

    路径码替代字段,逗号分隔的字符串列表

     

    RIGHTS

    页面所有操作权限

    NVARCHAR(1000)

    1000

       

    ''

    页面所有操作权限

     

    DATAS

    页面所有数据权限

    NVARCHAR(1000)

    1000

       

    ''

    页面所有数据权限

     

    MARKS

    页面所有权限标记

    NVARCHAR(1000)

    1000

         

    页面所有权限标记

    权限标记实体在逻辑层定义,包含Key、Name、Remark

     

    CONFIGVALUE

    配置值

    NVARCHAR(MAX)

         

    ''

    配置值

    菜单上的配置信息

     

    CONFIGTARGET

    配置目标实体

    NVARCHAR(1000)

    1000

       

    ''

    配置目标实体

     

    CONFIGFORM

    配置窗体

    NVARCHAR(50)

    50

       

    ''

    配置窗体

    存储ConfigTaget实体对应的编辑窗体PresentCode

     

    CONFIGPARSER

    配置解析器

    NVARCHAR(50)

    50

       

    ''

    配置解析器

     

    ARGS

    参数

    NVARCHAR(1000)

    1000

       

    ''

    参数

    Action菜单,传递给Action的参数列表

     

    TAGS

    标签

    NVARCHAR(1000)

    1000

       

    ''

    标签

    预留

     

    SORTCODE

    排序码

    INT

         

    0

    排序码

    上移下移支持

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

     

    STATES

    状态

    INT

         

    0

    状态

    [返回]


    表名:ORGINFO 解释:组织机构(OrgInfo)
    备注: 组织机构

    ORGINFO(组织机构(OrgInfo))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    ORGKEY

    机构主键

    NVARCHAR(50)

    50

         

    机构主键

     

    ORGKIND

    机构类型

    INT

       

    0 总公司
    1 子公司
    2 直营店
    3 经销商
    4 分工厂
    5 供应商
    6 合作伙伴

     

    机构类型

    公司、部门:0_总公司、1_子公司、2_直营店、3_经销商、4_分工厂、5__供应商、6_合作伙伴

     

    ORGNAME

    机构名称

    NVARCHAR(50)

    50

         

    机构名称

     

    ORGCODE

    机构编码

    NVARCHAR(50)

    50

       

    ''

    机构编码

     

    PARENTKEY

    直属父级机构

    NVARCHAR(50)

    50

       

    -1

    直属父级机构

     

    PARENTKEYS

    所有父级机构

    NVARCHAR(MAX)

         

    ''

    所有父级机构

    便于权限验证,查看所有下级部门的数据

     

    DIRECTCORPIC

    直属公司

    NVARCHAR(50)

    50

         

    直属公司

    比如直营店下的员工,只能查看直营店的数据

     

    SORTCODE

    排序码

    INT

         

    0

    排序码

    当前只支持上移下移,拖动支持依赖于外部顺序存储,不适用此字段

     

    TAGS

    标签

    NVARCHAR(1000)

    1000

       

    ''

    标签

    预留

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    STATES

    状态

    INT

         

    0

    状态

    [返回]


    表名:RIGHTITEM 解释:权限项(RightItem)
    备注: 权限项
    权限项中存储系统中所有出现过的权限,
    ModulePage、DataItem添加时进行选择

    RIGHTITEM(权限项(RightItem))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    RIGHTKEY

    权限主键

    NVARCHAR(50)

    50

         

    权限主键

     

    RIGHTCODE

    权限码

    NVARCHAR(50)

    50

         

    权限码

     

    RIGHTNAME

    权限名

    NVARCHAR(50)

    50

         

    权限名

     

    ICONIMAGE

    图片图标

    NVARCHAR(50)

    50

         

    图片图标

    对应文件标识

     

    ICONFONT

    字体图标

    NVARCHAR(50)

    50

       

    ''

    字体图标

    对应字体样式

     

    SORTCODE

    排序码

    INT

         

    0

    排序码

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

     

    STATES

    状态

    INT

         

    0

    状态

    当前只有 在用状态

    [返回]


    表名:RIGHTMAP 解释:权限映射(RightMap)
    备注: 权限映射
    一个人员可以有多个用户:
    人员?用户(UserInfo外键关联Employee)
    主权限都通过用户角色进行管理,包含:
    用户?角色、角色?系统、角色?菜单(菜单包含权限/数据/标记)
    用户直接权限:
    用户单独附加或排除权限,
    用户?系统、用户?菜单(菜单包含权限/数据/标记)

    RIGHTMAP(权限映射(RightMap))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    MAPKEY

    映射标识

    NVARCHAR(50)

    50

         

    映射标识

     

    MAPNAME

    名称

    NVARCHAR(50)

    50

         

    名称

     

    SOURCEKIND

    源类型

    INT

       

    1 用户
    2 角色

     

    源类型

    1 _用户、2_角色

     

    SOURCEKEY

    源标识

    NVARCHAR(50)

    50

         

    源标识

    用户主键 or 角色主键

     

    TARGETKIND

    目标类型

    INT

       

    1 系统
    2 模块/菜单/操作/数据/标记

     

    目标类型

    1_系统、2_模块/菜单/操作/数据/标记

     

    TARGETKEY

    目标标识

    NVARCHAR(50)

    50

         

    目标标识

    系统主键 or 菜单主键

     

    OPERATERIGHTS

    拥有的操作权限

    NVARCHAR(1000)

    1000

       

    ''

    拥有的操作权限

    隶属操作权限.Enable,对应RightItem表

     

    VISIBLERIGHTS

    拥有的可见权限

    NVARCHAR(1000)

    1000

       

    ''

    拥有的可见权限

    隶属操作权限.Visible,对应RightItem表

     

    DATARIGHTS

    拥有的数据权限

    NVARCHAR(1000)

    1000

       

    ''

    拥有的数据权限

    对应DataItem表

     

    MARKRIGHTS

    拥有的标记权限

    NVARCHAR(1000)

    1000

       

    ''

    拥有的标记权限

     

    TAGS

    标签分组

    NVARCHAR(1000)

    1000

       

    ''

    标签分组

    对应未域枚举,用于Dashboard、数据聚合界面,聚合权限

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

     

    STATES

    状态

    INT

         

    0

    状态

    暂时只有 在用 状态

    [返回]


    表名:ROLEINFO 解释:角色信息(RoleInfo)
    备注: 角色信息

    ROLEINFO(角色信息(RoleInfo))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    ROLEKEY

    角色主键

    NVARCHAR(50)

    50

         

    角色主键

     

    ROLEKIND

    角色类型

    INT

           

    角色类型

    ①全局角色②自定义角色

     

    ROLENAME

    角色名称

    NVARCHAR(200)

    200

         

    角色名称

     

    SYSTEMKEY

    系统标识

    NVARCHAR(50)

    50

         

    系统标识

     

    CORPKEY

    企业标识

    NVARCHAR(50)

    50

         

    企业标识

     

    PARENTKEY

    父级角色

    NVARCHAR(50)

    50

       

    ''

    父级角色

     

    ISSUPER

    是否超级管理员

    BIT

         

    0

    是否超级管理员

     

    ALLOWS

    允许行为

    INT

         

    1

    允许行为

    位域枚举,当前支持1修改2删除

     

    TAGS

    标签

    NVARCHAR(1000)

    1000

       

    1

    标签

    预留字段

     

    SORTCODE

    排序码

    INT

         

    0

    排序码

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

     

    STATES

    状态

    INT

         

    0

    状态

    [返回]


    表名:SYSTEMITEM 解释:系统项(SystemItem)
    备注: 系统项

    SYSTEMITEM(系统项(SystemItem))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    SYSTEMKEY

    系统主键

    NVARCHAR(50)

    50

         

    系统主键

     

    SYSTEMKIND

    类型

    INT

           

    类型

    1 _Windows桌面程序、2_Web程序、3_App程序、4_WinService、5_微信程序

     

    SYSTEMNAME

    名称

    NVARCHAR(50)

    50

         

    名称

     

    ISFRONTEND

    是否前端系统

    BIT

         

    0

    是否前端系统

    用户直接使用的系统

     

    NEEDLOGIN

    是否需要登录

    BIT

         

    0

    是否需要登录

    不需要登录的系统,相当于任何人都可以使用,不需要系统令牌单点登录验证

     

    SYSTEMTOKEN

    系统令牌

    NVARCHAR(1000)

    1000

       

    ''

    系统令牌

     

    SYSTEMICON

    系统图标

    NVARCHAR(100)

    100

       

    ''

    系统图标

     

    DISPLAYS

    显示范围

    INT

       

    0 所有
    1 权限设置
    2 入口程序

    0

    显示范围

    显示在:1_权限设置、2_入口程序

     

    TERMINALS

    支持终端

    INT

         

    0

    支持终端

    支持windows pc、android、iphone、web浏览器、移动浏览器等

     

    FUNCTIONS

    支持功能

    INT

         

    0

    支持功能

    系统支持功能:1_SingleSignOn、2_AutoUpdate

     

    TAGS

    标签

    NVARCHAR(1000)

    1000

       

    ''

    标签

    预留

     

    EXTRAS

    额外信息

    NVARCHAR(MAX)

         

    ''

    额外信息

    存储系统额外配置信息

     

    SORTCODE

    排序码

    INT

         

    0

    排序码

    当前支持上移、下移,不支持拖动排序

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

     

    STATES

    状态

    INT

         

    0

    状态

    [返回]


    表名:USERINFO 解释:用户信息(UserInfo)
    备注: 用户信息

    USERINFO(用户信息(UserInfo))

    是否主键

    字段名

    字段描述

    数据类型

    长度

    可空

    约束

    缺省值

    备注

    USERKEY

    用户主键

    NVARCHAR(50)

    50

         

    用户主键

     

    USERKIND

    类型

    INT

           

    类型

    备用字段

     

    USERNAME

    用户名

    NVARCHAR(50)

    50

         

    用户名

     

    NICKNAME

    昵称

    NVARCHAR(50)

    50

         

    昵称

     

    USERAVATAR

    头像

    NVARCHAR(50)

    50

       

    ''

    头像

    存储头像对应的文件主键

     

    PHONE

    手机号

    NVARCHAR(20)

    20

         

    手机号

    用于短信下发

     

    EMAIL

    电子邮件

    NVARCHAR(50)

    50

         

    电子邮件

    用于密码找回

     

    PASSWORDS

    加密后密码

    NVARCHAR(1024)

    1024

         

    加密后密码

     

    PASSWORDSALT

    加密盐渍

    NVARCHAR(128)

    128

         

    加密盐渍

     

    PASSWORDWAY

    加密方式

    INT

         

    ''

    加密方式

    不加密、MD5、DES等

     

    ALLOWLOGIN

    是否允许登录

    BIT

         

    1

    是否允许登录

     

    REFUSELOGINREASON

    拒绝登录原因

    NVARCHAR(1000)

    1000

       

    ''

    拒绝登录原因

     

    ISSUPER

    是否超级管理员

    BIT

         

    0

    是否超级管理员

     

    EMPKEY

    雇员主键

    INT

           

    雇员主键

     

    SESSIONTOKEN

    Session令牌

    NVARCHAR(1000)

    1000

       

    ''

    Session令牌

     

    LASTLOGINTIME

    最后登录时间

    DATETIME

         

    getdate()

    最后登录时间

     

    LASTLOGINIP

    最后登录Ip

    NVARCHAR(50)

    50

       

    ''

    最后登录Ip

     

    LASTLOGINTERMINAL

    最后登录终端

    NVARCHAR(50)

    50

       

    ''

    最后登录终端

     

    LASTLOGINTICKET

    最后登录票据

    NVARCHAR(1000)

    1000

       

    ''

    最后登录票据

     

    PROFILES

    个性化配置

    NVARCHAR(MAX)

         

    ''

    个性化配置

    存储用户个性化配置

     

    TAGS

    标签

    NVARCHAR(1000)

    1000

       

    ''

    标签

    备用字段

     

    TENANTID

    租户Id

    INT

           

    租户Id

     

    CREATETIME

    创建日期

    DATETIME

         

    getdate()

    创建日期

     

    CREATEUSERID

    创建用户

    INT

           

    创建用户

     

    MODIFYTIME

    修改日期

    DATETIME

         

    getdate()

    修改日期

     

    MODIFYUSERID

    修改用户

    INT

           

    修改用户

     

    REMARK

    备注

    NVARCHAR(MAX)

         

    ''

    备注

    用户排序依赖于Employee外部

     

    STATES

    状态

    INT

         

    0

    状态

    在用,禁用,删除,禁止登陆

    [返回]

     

     本文为作者原创,转载请注明出处。

  • 相关阅读:
    html 按钮跳转问题(及其相关)
    用JS写的一个简单的时钟
    JS里面function和Function的区别
    Sharepoint常见概念
    整理个人学习方向,技术列表,通过这个来明确方向
    关于SqlServer的内连接,外链接以及left join,right join之间的一些问题与区别。
    display:none与visibility:hidden的区别
    给自己立下一个flag先
    linux 打包和压缩的概念和区别
    Hadoop和Spark的比较区别
  • 原文地址:https://www.cnblogs.com/WangHuaiSheng/p/7703909.html
Copyright © 2011-2022 走看看