# privilege_权限控制设计思路
> 本文档主要是简单描述下权限控制的主要部分。
> **用户 super 拥有所有的权限**,代码上有判断当前登录用户帐号。
## 基本脉络
>主要分成5个部分。
1. 三个权限基础数据对象和URI
2. 组织基础数据对象
3. 角色、用户的权限表
4. 角色、用户的权限数据(用于访问控制、给其它用户配置权限)
5. 基于用户的权限数据生成有层级的访问菜单
## 分解
### 1. 三个权限基础数据对象和URI
包含 **URI.java,PNode.java, PModule.java, PMenu.java** 对象
> URI: 字面意思,所有Controller的@RequestMapping的value都在此对象定义。
> PNode: 定义最细粒度的权限控制节点,也能起到聚合控制的作用。
> PModule: 定义模块和模块下拥有的多个PNode节点。
> PMenu: 定义访问菜单。聚合PModule定义的模块到菜单下。初步形成有层级的访问菜单。
彼此关联:

### 2. 组织基础数据对象
依据PMenu的配置代码,生成树形菜单的数据结构。
#### Menu.java
public class Menu {
private int id; // 当前ID PMenu.ordinal() + 1;
private int pid = 0; // 父id PMenu.ordinal() + 1
private String name; // 菜单名称
private List moduleList = new ArrayList<>(); // 模块列表
private List