### 12.4.1 Function plus系统的核心是Function表,代表了系统应该提供的所有功能,Function表示是一个树结构,这符合业务系统的功能划分 | ID | CODE | NAME | CREATE_TIME | ACCESS_URL | PARENT_ID | TYPE | | ---- | ---------- | ---- | ----------- | -------------------- | --------- | ---- | | 1 | user |  | NULL | /admin/user/index.do | 0 | FN0 | | 2 | user.query |  | NULL | NULL | 1 | FN1 | | 3 | user.edit |  | NULL | NULL | 1 | FN0 | code 字段是一个英文字符,跟Contorller的方法搭配,用在@Function注解里,表示当前方法的属于哪个功能 ~~~java @GetMapping(MODEL + "/index.do") @Function("user") public ModelAndView index() { ModelAndView view = new ModelAndView("/admin/user/index.html"); view.addObject("search", UserQuery.class.getName()); return view; } @GetMapping(MODEL + "/edit.do") @Function("user.edit") public ModelAndView edit(String id) { ModelAndView view = new ModelAndView("/admin/user/edit.html"); CoreUser user = userConsoleService.queryById(id); view.addObject("user", user); return view; } ~~~ PLUS系统并未像其他系统,通过注解来申明角色,因为系统角色可以无限扩展,这种角色申明只适合小系统 ~~~java //其他权限系统设计方式 @GetMapping(MODEL + "/edit.do") @Allowed("amdin","manager") public ModelAndView edit(String id) { } ~~~ 比如有些系统设计了@Allowed,参数是角色,来控制权限。这种扩展就有很大的局限性 Function 表的 ACCESS_URL 是一个抽象地址,用来表示此功能是否有入口地址。注意,他并不是菜单的访问地址,后面的Menu 会关联到Function从而获得Function的访问地址。 PARENT_ID 表示上一级功能,这有助于树型管理。再次说明,Function只是你开发的目标系统的功能描述。并没有涉及到权限,他相当于RBAC模型里的资源 Function中的type指名了功能是查询功能,还是修改功能,如果是查询功能,可以在后面数据权限里分配一个数据权限。FN0 表示查询功能,FN1表示修改功能