公众号自动登录库表设计

注册登录

现在采用的是,个人公众号的登录方式,很多的权限没有。

实现:

点击登录,登录页面显示二维码 + 验证码 --> 用户关注公众号,将登录页面上的验证码输入到公众号 --> 自动登录

登录流程如下:

库表设计

基于公众号的登录方式,用户登录表的设计

CREATE TABLE `user`(
    `id` int(10) unsinged NOT NULL AUTO_INCREMENT COMMENT '主键ID',
    `third_account_id` varchar(128) NOT NULL DEFAULT '' COMMENT  '第三方用户ID',
    `user_name` varchar(64) NOT NULL DEFAULT '' COMMENT  '用户名',
    `password` varchar(128) NOT NULL DEFAULT '' COMMENT  '密码' ,
    `login_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录方式: 0-微信登录,1-账号密码登录', `deleted` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除',
     `create_time` timestamp NOT NULL  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time` timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP  ON UPDATE             
     CURRENT_TIMESTAMP  COMMENT  '最后更新时间' ,
     PRIMARY KEY (`id`),
    KEY `key_third_account_id` (`third_account_id`),
    KEY `key_user_name` (`user_name`),
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户登录表';

上面冗余了 user_name,password 用户名和密码的登录方式,主要是给管理员登录后台使用的

用户首次登录之后,会在user表中插入一条数据,主要关注third_account_id这个字段,他记录的是微信开放平台返回的唯一用户id

权限管理

权限管理分为两块: 用户身份识别 + 鉴权

方案设计

用户身份识别:

现在用户身份的方案很多,我们现在采用的是最基础的、历史最悠久的方案。cookie + session方式(分布式的时候会用session + jwt)

整体流程:

服务内部身份传递:

另一个需要考虑的带你在于用户的身份如何在整个系统内传递? 对于单体架构而言,借助ThreadLocal来实现。

  •         自定义Filter ,实现用户身份识别(从cookie中拿到SessionId,转userId)
  •         定义全局上下文ReqlnfoContex: 将用户信息,写入全局共享的ThreadLocal中
  •         在系统内,需要获取当前用户的地方,直接通过访问ReqlnfoContex上下文获取用户信息
  •         请求返回前,销毁上下文中当前用户信息。

鉴权

根据用户的角色与接口权限要求进行判定,我们设计三种权限带你类型

  •         ADMIN : 只有管理员才能访问的接口
  •         LOGIN: 只有登录了才能访问的接口
  •         ALL: 默认,没有权限限制

我们在需要权限判定的接口上,添加上对应的权限要求,然后借助AOP来实现权限判断

  •         当接口上有权限点要求时(除ALL之外)
  •         首先获取用户信息,如果没有登录,则直接报403
  •         对于ADMIN限制的接口,要求查看用户角色,必须为admin

库表设计

我们将用户角色信息写入用户基本信息表中,没有单独抽出一张角色表来,然后进行映射,主要是因为这个系统逻辑相对清晰,没有太复杂的角色关系,因此采用了轻量级的设计方案

CREATE TABLE user `info`( 
`id`int(10) unsigned NOT NULL AUTO INCREMENT COMMENT '主键ID',
 `user_id` int(10) unsigned NOT NULL DEFAULT 'O' COMMENT '用户ID',
 `user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '用户名' ,
 `photo` varchar(128) NOT NULL DEFAULT '' COMMENT'用户图像',
 `position` varchar(50) NOT NULL DEFAULT COMMENT '职位' ,
  `company` varchar(50) NOT NULL DEFAULT '' COMMENT'公司',
 `companyprofile` varchar(225) NOT NULL DEFAULT '' COMMENT '个人简介',
 `user_role` int(4) NOT NULL DEFAULT 'O' COMMENT '0 普通用户 1 超管',
 `extend` varchar(1024) NOT NULL DEFAULT '' COMMENT '扩展字段',
 `ip` json NOT NULL COMMENT '用户的ip信息' ,
 `deleted`tinyint(4) NOT NULL DEFAULT 'O' COMMENT '是否删除',
 `create_time` timeStamp NOT NULL DEFAULT CURRENT TIMESTAMP COMMENT '创建时间 
 `update_time` tiMeStaMP NOT NULL DEFAULT CURRENT TIMESTAMP ON UPDATE CURRENT 
 TIMESTAMPPRIMARY KEY(`id`),
 KEY `key user id`(`user id`)
)ENGINE=InNODB AUTO INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户个人信息表':

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值