前后端分离模式下的权限设计方案

前后端分离模式下,所有的交互场景都变成了数据,传统业务系统中的权限控制方案在前端已经不再适用,因此引发了我对权限的重新思考与设计。

权限控制到底控制的是什么?

在理解权限控制之前,需要明白两个概念:资源和权限。

什么是资源,对于一个系统来说,系统内部的所有信息都可以理解为这个系统的资源。

页面是资源、数据是资源、按钮是资源、图片是资源、甚至页面上一条分割线也可理解为是这个系统的资源。而权限就是访问某个资源所需要的标识。

无论系统的权限如何设计,在用户登录时,都可以计算得出用户所拥有的权限标识集合,也就确定了该用户能访问哪些系统资源,这就是我理解的权限控制的本质。

关于分离:

1、前后端分离开发,六大方案全揭秘:HTTP API 认证授权术

2、SpringBoot2.x炫酷吊炸天前后端分离的后台管理系统实例

3、聊一聊前后端分离接口规范

于是我们可以得出:权限控制是控制登录用户对于系统资源的访问。

前后端分离模式下,前后端在权限控制中各自的职责是什么?

在弄清前后端在权限控制中各自的职责是什么之前,需要理解前后端各自在系统中的职责。这个还是很好理解:

  • 服务端:提供数据接口。

  • 前端:路由控制、页面渲染。

由于前端负责与用户交互,用户所能操作的资源入口都是由前端进行控制,那么前端的权限控制就包括:

  • 前端路由的权限控制,过滤非法请求,用户只能访问权限范围内的页面资源。

  • 页面内组件的权限控制,根据用户的权限控制页面组件的渲染。包括各种按钮、表格、分割线等。

随着前端组件化的快速发展,用户所看到的一切均可理解为组件,页面是个大组件,其内部由各个小组件拼凑而来,那么前端权限控制最终落地到对组件的权限控制。于是脑补了出了最优雅的权限组件使用方式:

<组件 permissionName='xxx' />

前端可以渲染出用户权限范围内的各种系统资源,但是不能保证数据接口的安全性,某些比较喜欢折腾的用户完全可以越过前端的页面访问我们系统的数据接口,那么服务端的权限控制最终落地到对接口的权限验证。

实现思路

引上文,系统的一切资源均可进行权限控制,实际上也可以做到,但在我们实际的操作过程中,往往不需要细化到分割线那种程度。这里以按钮级权限控制为例做实现说明,如果有更细粒度的权限需求,此思路依然可行。

前端路由权限控制。用户登录时拿到用户拥有的权限标识集合,在前端存储。路由变化时,进行权限判断,通过则渲染对应页面组件,否则渲染403组件。示例代码:

let hasPermission = permission.check(current.permissionName);<div className={styles.content}>    {hasPermission ? children : <Exception type={403}/>}div>

封装bird-button权限按钮组件,传入按钮所需权限名,内部进行权限判断,通过则渲染按钮。

<BirdButton permissionName={'sys'} type='primary'>测试按钮BirdButton>

服务端。服务端权限验证很好理解。使用拦截器验证当前请求的权限。代码示例:

public class SsoAuthorizeInterceptor extends HandlerInterceptorAdapter {    @Autowired    private TicketHandler ticketHandler;    @Autowired    private SsoAuthorizeManager authorizeManager;    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        if (!(handler instanceof HandlerMethod)) return false;        HandlerMethod handlerMethod = (HandlerMethod) handler;        SsoAuthorize authorize = handlerMethod.getMethodAnnotation(SsoAuthorize.class);        if (authorize != null) {            TicketInfo ticketInfo = ticketHandler.getTicket(request);            if (ticketInfo == null) {                throw new UnAuthorizedException("用户信息已失效.");            }            String[] requirePermissions = authorize.permissions();            if(requirePermissions.length==0)return true;            boolean isCheckAll = authorize.isCheckAll();            UserPermissionChecker permissionChecker = authorizeManager.getUserPermissionChecker();            if(!permissionChecker.hasPermissions(ticketInfo.getUserId(),requirePermissions,isCheckAll)){                throw new ForbiddenException("用户没有当前操作的权限.");            }        }        return true;    }}

项目中实现,项目中除了按钮级权限方案还提供了后台业务系统开发中常用的数据组件,包括:

  • 全自动树表:bird-tree-grid。

github.com/liuxx001/bird-front/blob/master/doc/bird-tree-grid.md

  • 数据树:bird-tree。

github.com/liuxx001/bird-front/blob/master/doc/bird-tree.md

  • 全自动表单:bird-form。

github.com/liuxx001/bird-front/blob/master/doc/bird-form.md

  • 权限按钮:bird-button。

github.com/liuxx001/bird-front/blob/master/doc/bird-button.md

所有业务组件的理念均是结合服务端接口进行组件的封装,兼顾灵活性的同时保证更优的业务开发速度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 针对SpringBootVue前后端分离设计培养计划管理系统的设计思路和方法,一般可遵循以下步骤: 1. 需求分析:明确系统需求和功能模块,确定系统开发目标和范围。 2. 概要设计设计系统的整体框架和模块划分,确定系统的技术架构、数据模型等。 3. 详细设计:具体设计系统各个模块的功能实现,制定接口规范和数据库设计方案。 4. 编码实现:根据设计文档进行编码实现,包括前端Vue和后端SpringBoot的开发。 5. 测试验收:完成编码后进行单元测试和综合测试,保证系统的质量和稳定性。 6. 部署上线:将系统部署到服务器上,并进行线上测试,确保系统可以正常运行。 在这个过程中,需要注意前后端分离设计的特点,即前端和后端开发相互独立,通过接口进行数据交互。因此,需要制定清晰的接口规范,确保数据传输的正确性和安全性。同时,还需要注意前端和后端技术的兼容性,确保两个端能够无缝对接。 总之,针对SpringBootVue前后端分离设计培养计划管理系统的设计思路和方法,需要在需求分析、概要设计、详细设计、编码实现、测试验收和部署上线等方面进行综合考虑,以确保系统的高效、稳定、安全和可维护性。 ### 回答2: Spring Boot和Vue前后端分离设计是一种常用的Web应用设计模式,在设计培养计划管理系统时,可以采用以下思路和方法: 1. 前后端分离前后端分离是指前端使用Vue进行页面渲染,后端使用Spring Boot提供接口服务。通过这种设计模式,可以有效地解耦前后端逻辑,提高开发效率和系统性能。 2. 定义数据模型:根据培养计划管理系统的需求,定义必要的数据模型。这些模型可以包括学生、课程、考试等信息。使用Java对象模型或者数据库表结构来表示这些模型。 3. 设计接口:基于前后端分离设计思路,使用Spring Boot设计和实现RESTful接口。这些接口可以包括学生信息查询、课程安排、考试成绩录入等功能。通过严格定义接口规范,前端可以通过调用这些接口获取所需的数据。 4. 前端页面设计:使用Vue进行前端页面的设计和开发。根据系统需求,设计学生信息展示、课程安排、考试成绩录入等页面。使用Vue提供的组件和工具,实现页面的交互和数据展示。 5. 数据交互:前端通过调用后端提供的接口获取所需数据。使用Vue的Ajax、Axios等工具,发送HTTP请求并解析返回的数据。前端可以根据需要进行数据筛选、排序和展示。 6. 系统安全:为了保障系统的安全性,可以在后端使用Spring Security等框架进行权限控制和身份认证。通过定义角色和权限,限制用户操作和访问敏感数据。 7. 测试和部署:在开发完成后,进行系统测试和调试。可以使用JUnit等测试框架对后端接口进行单元测试,使用Vue提供的测试工具对前端页面进行测试。最后,将后端部署到服务器上,并将前端页面打包部署到Web服务器上。 通过采用Spring Boot和Vue前后端分离设计,可以实现系统开发的高效和灵活性。前后端分离设计模式可以有效解耦前后端逻辑,提高系统性能和扩展性。同时,Spring Boot和Vue作为流行的开发框架,拥有庞大的社区支持和丰富的开发资源,可以大大提升系统开发的效率和质量。 ### 回答3: SpringBoot和Vue是目前非常流行的前后端分离开发框架。设计和培养一个计划管理系统需要以下步骤和方法。 1.需求分析:首先,要清楚定义计划管理系统的功能和需求,包括用户管理、计划创建、查看和修改计划、日历展示等功能。 2.数据库设计:根据需求设计数据库模型,确定需要的表和字段,并建立相应的关系。 3.SpringBoot后端开发:使用SpringBoot搭建后端开发环境,根据需求编写相应的控制器、服务和数据访问层。使用Spring Security实现用户认证和授权。 4.Vue前端开发:使用Vue框架搭建前端开发环境,设计和开发用户界面。使用Vue Router实现页面导航和路由跳转。使用Axios进行和后端的数据交互。 5.前后端接口设计:定义前后端之间的接口规范,包括请求方式、参数和返回结果的格式。使用JSON进行数据交互。 6.前后端联调:前后端开发完成后,进行联调测试,确保前后端的数据交互和功能实现的正确性。 7.部署和上线:将后端代码打包成jar包或war包,将前端代码打包成静态资源,部署到服务器上,配置好相应的环境和数据库信息,使系统能在服务器上运行。 以上是一般的设计思路和方法,当然具体实现还有很多细节需要考虑,比如数据校验、异常处理、权限管理等等。一个好的计划管理系统应该具备良好的用户体验和响应速度,因此在设计和开发过程中需要注重系统的性能优化。同时,定期进行系统的维护和更新,修复漏洞和改进功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值