Lei Zhang

时光已逝永不回,
往事只能回味。
... ...
春风又吹红了花蕊,
你已经也添了新岁。

▓▓▓▓▓▓▓▓▓▓▓▓▓▓░ 88%



3Years-7 安装检测 & 路由保护区分

2018-04-19 » 没填完的坑 / 3Years , CodeIgniter , JWT , Tutorial , 环境搭建

项目地址:https://github.com/PassionZale/3Years


如果你曾经使用过类似 wordpress 等开源的系统,不管系统类型是做什么的,它都会有一个安装逻辑,来校验系统的完整度。

通常安装逻辑最主要的三个步骤:

1. 检测服务器环境;

2. 创建数据库;

3. 创建超级管理员账户。

在 3Years 中,我会将前两步都省去,着重来介绍创建超级管理员账户这一步。


超级管理员账户

类似商城的后台用户系统,通常是不开放注册,且 superuser 唯一。创建 superuser 后,由 superuser 去创建普通用户,并为普通用户分配相应的权限。

在 3Years-2 用户模型 中,is_superuser 字段便是用来标识此种账户。由于是前后端分离的架构,那么当客户端访问前端时,系统如何知道 superuser 是否创建了呢?

1. 定义创建超级管理员 API 路由,如: /backend/auth/superuser

2. 使用钩子函数拦截整个系统入口,判断 superuser.lock 文件是否存在;

3. superuser.lock 存在则 superuser 已创建,否则统一返回 401 Http Code;

4. 接收到约定好的 401 Code,由前端引导用户至创建管理员账户 router

5. 服务端创建 superuser 后,创建 superuser.lock


拦截请求

在 CI 中,我们可以在 pre_system 钩子中进行拦截,注意排除掉“创建超级管理员路由”:


此时,访问服务端,会直接抛出 403 superuser is not exist


创建超级管理员


写入数据库,并创建 superuser.lock


路由保护区分

你需要将 AUTH 部分和 API 部分相互独立,并用不同的钩子或中间件对请求进行拦截及校验。

在 CI 中,通过控制器二级目录,很容易便能区分路由:


/backend/auth

通过 SystemHookpre_system 钩子中进行拦截:

1. 创建超级管理员;

2. 处理登录,并返回 Authorization Token

/backend/api/*

通过 BackendApiHookpre_controller_constructor 钩子中进行拦截:

存放全部资源控制器,只有携带合法 Authorization Token 的请求才可被访问。

展开选填信息