发表于: 2018-10-14 22:38:32

1 492


今天完成的事情:

 快乐水-樱桃可乐方案:

 


后台管理:



权限方案:

后台微服务通过mybatis操作5个表(账户、账户角色映射表、角色表、角色模块映射表、模块表),除了后台管理需要的16个接口以外,再添加三个接口(登录接口、注销接口、获取左边栏模块显示接口)



登录接口:

前后端交互:

方案:

提供登录接口给前端调用,前端传入账户密码,验证正确后,后端查询账户的所有角色、权限(模块)生成JWT放置到响应头中, 前端从响应头中获取JWT。每次访问将JWT放置在请求头中,用于登录验证与权限控制。与此同时将生成的JWT保存一份到redis中,作为判断登录状态的依据。并查询登录账户的Id以及角色放置到返回结果的date中,用于前端的登录后右上角的登录显示。

参数:

      

SQL:

根据账号名查询密码与盐值

SELECT

manager.`password`,manager.salt,is_locked

from manager

where account=账户名

 



后端登录验证:

方案:

前端每次请求都先通过zull,在zull网关中通过获取请求头中的JWT,读取redis中是否存在对应的缓存,判断用户是否已登录。

对于只需要登录即可访问的接口,验证登录成功则放行到对应的微服务中。

对于需要鉴权才可访问的接口,验证登录成功后解码JWT获取用户具有的权限,具有访问接口需要的权限才放行到对应的对应的微服务中。

对于无法完成登录验证或者鉴权的请求,在zull重定向到报错的控制器中。

 

 

注销接口:

需求:

让前端传递过来的JWT无效。

方案:

当用户登录成功时,生成JWT的同时,保存一份到redis缓存中。通过redis的主从设置,在zull中设置一个redis的从库,每一次在zull中先判断缓存中是否存在该jwt
当前端调用注销接口时,在主redis中删除掉对应的jwt。此时zuul中的从redis中将不再存在对于的jwt,从而实现注销逻辑.

 

显示左边栏的接口:

需求:

不同账户登录后只显示具有访问权限的模块

方案:

前端登录成功后,将登录账户的id作为参数,调用登录接口,获取该用户的权限(模块),前端根据用户具有的权限(模块)显示模块。
接口参数:

SQL:

根据账户id和父模块id获取子模块

SELECT

module.id as id,module.module_name as name

from manager

LEFT JOIN manager_role on (manager.id=manager_role.user_id)

LEFT JOIN role_module on (manager_role.role_id=role_module.role_id)

LEFT JOIN module on (role_module.module_name=module.module_name)

where manager.id=账户ID and module.father_module=父模块ID

Service层通过父模块获取子模块的方式,嵌套查询子模块构造三层模块列表。

 

 

密码管理:

需求:

作为一个管理员,我想要修改后台账号密码,以便于保证后台账号的安全性。

方案:

对前端提供修改密码的接口,JWT中获取当前操作者的ID与入 参对比后,通过更新sql语句更新后台账户表的密码;

参数:

      

SQL:

更新账户密码

update

manager

SET password = 新密码,salt=UUID

 WHERE id = 账户ID

 

 


账户管理:

需求:

作为一个管理员,我想要可以对所有的账号角色进行增删改查的操作,以便我对不同账号的角色管理。

方案:

进入账户管理页面后,前端通过页码调用获取账户列表的接口查询账户表中分页数据,并调用获取角色接口查询角色表中不重复的角色

 

接口1

查询账户列表

方案:

使用分页逻辑将指定的页码中的账户和对应的角色通过SQL语句查询出一个账户集合。 

参数:

      

SQL语句:

联表查询账户表与角色表的数据

select    

manager.id,manager.serial_id,manager.account,

role.id as r_id,role.role_name,manager.is_locked,

manager.created_by,manager.updated_at,manager.created_at,manager.updated_by

from manager

LEFT JOIN manager_role ON (manager.id=manager_role.user_id)

LEFT JOIN role ON (role.id=manager_role.role_id)

 

接口2

查询不重复角色

方案:

通过查询角色表获取不重复的角色列表

参数:

     

SQL

查询所有角色名(去重)

select

role_name

from role

group by role_name

 


接口3

模糊查询账户列表

方案:

通过模糊查询、动态Sql、联表查询,分页逻辑,从账户表、账户角色映射表、角色表中查询出需要(账户ID、角色、账户名、创建人)的指定页码的账户列表集合。

参数:

      

SQL语句:

根据模糊条件联表查询账户表、角色表记录

select    

manager.id,manager.serial_id,manager.account,

role.id as r_id,role.role_name,manager.is_locked,

manager.created_by,manager.updated_at,manager.created_at,manager.updated_by

from manager

LEFT JOIN manager_role ON (manager.id=manager_role.user_id)

LEFT JOIN role ON (role.id=manager_role.role_id)

where

 manager.serial_id like '%账户ID%'

and    role.role_name = '角色名'

and    manager.account like '%账户名%'

and   manager.created_by like '%创建人%'


接口4

新增账户

方案:

通过mysql事务,分别添加两条记录到后台账户表和账号角色映射表中。

参数:

      

SQL:

更新账户表

INSERT

INTOmanager

(manager.id as m_id,
manager.serial_id,
manager.account,
role.id as r_id,
role.role_name,
manager.is_locked,
manager.created_by,
manager.updated_at,
manager.created_at,
manager.updated_by)

VALUES

(账户,密码,盐值,冻结状态,更新人,创建人,更新时间,创建时间);
   


接口5(编辑账户)方案:通过mysql事务,分别修改后台账户表和账号角色映射表中的相关记录。
修改账户角色映射表的操作:先删除掉该账户在账户角色映射表中的所有记录,然后将新的账户角色关系批量插入到账户角色映射表中。


接口6(删除账户)方案:通过mysql事务删除语句,到后台账户表和账号角色映射表中删除指定的账户记录,并删除掉redis中的对应缓存(完成退出登录的需求)。

 


角色管理:

作为一名管理员,我想要对所有的模块内容进行增删改查的统一管理,以便我对不同模块的内容设置。


接口1(多条件模糊查询)方案:通过模糊查询、动态Sql、分页逻辑,从角色表中查询出需要的指定页码的数据集合。


接口2(角色列表)方案:(形参:页码)使用分页逻辑将指定的页码中的账户通过SQL语句查询出一个角色集合。 


接口3(新增)方案:通过mysql事务,分别添加两条记录到角色表和角色权限(模块)映射表中。


接口4(编辑)方案:通过mysql事务,分别修改角色表和角色权限(模块)映射表中的相关记录。


更新角色权限映射表的操作:先删除掉该账号的所有权限,然后通过批量添加语句在用户角色映射表中添加记录。


接口5(删除)方案:通过mysql事务删除语句,到角色表和角色权限映射表,以及角色账户映射表中删除指定的记录,同时获取具有该角色的账户ID,删除掉redis中的对应缓存(完成退出操作)。

 


模块管理:


接口1(多条件查询)方案:通过模糊查询、动态Sql、分页逻辑,从模块(权限)表中查询出需要的指定页码的数据集合。


接口2(模块列表)方案:(形参:页码)使用分页逻辑将指定的页码中的账户通过SQL语句查询出一个模块集合。 


接口3(新增)方案:通过mysql添加语句,添加记录到权限(模块)表中。


接口4(编辑)方案:通过mysql更新语句,修改角色权限(模块)表中记录。


接口5(删除)方案:通过mysql删除语句,到角色权限(模块)表中删除指定的记录,并获取到具有该权限的账户,删除掉redis中的对应缓存(完成退出操作)。

 

明天计划的事情:

汇总复盘评审方案

遇到的问题:

收获:

如上



返回列表 返回列表
评论

    分享到