关于权限设计的一些笔记

  应某学姐的要求,我记录了一些,在设计实验室框架过程中的一些想法。以上观点是我个人观点。

  权限一直都是各大管理系统中最为重要的一个环节,其中如何管理权限和模块也就成了重中之重。现阶段,主要存储权限的位置有数据库,和文件两种方式。数据库存储权限的方式我就不多说了,这是主流。这里我们要谈一谈,用文件存放权限。

  就我个人而言觉得权限放在文件里是一把双刃剑。权限是整个管理系统的核心所在,正确的权限分配和管理尤为重要,在实验室的框架中,我们采用了json文件的形式存储权限,这个有好处也有坏处。当然这个存储方式不是我们所决定的,是老师决定的。在我看来权限用文件存储的方式有好处也有坏处。我们先来谈一谈如何设计的权限。

  这是一个基本格式:

"simple/system/CodeTable": {
        "code": "simple/system/CodeTable",              // 模块编码
        "name1": "码表",                               // 中文名称
        "url": "/simple/system/CodeTable",            // 路由地址
        "route": "/simple/system/CodeTable",          // 路由地址
        "iconClass": "",                              // 图标
        "displayIndex": 0,                            // 展示优先级
        "parentCode": "simple/system",                // 父级模块编码
        "parentName": "系统管理",                       // 父级模块名称
        "moduleType": "电脑模块",                       // 模块类型
        "isInUse": "是",                               // 是否启用
        "routeParamsObj": "",                          // 我也不知道是啥
        "permissions": [                              // 权限,这里面包括了这个模块的所有权限
            {
                "code": "simple_system_CodeTable_Edit",
                "name1": "编辑码表",
                "fullName": "simple.系统管理.码表.编辑",
                "moduleCode": "simple/system/CodeTable",
                "urls": [
                    "/simple/system/CodeTable/findCodeTableForEdit",
                    "/simple/system/CodeTable/updateCodeTable",
                    "/simple/system/CodeTable/findCodeTablesWithIdNameByName"
                ]
            },
            {
                "code": "simple_system_CodeTable_Delete",
                "name1": "删除码表",
                "fullName": "simple.系统管理.码表.删除",
                "moduleCode": "simple/system/CodeTable",
                "urls": [
                    "/simple/system/CodeTable/deleteCodeTable"
                ]
            },
            {
                "code": "simple_system_CodeTable_View",
                "name1": "查看码表",
                "fullName": "simple.系统管理.码表.查看",
                "moduleCode": "simple/system/CodeTable",
                "urls": [
                    "/simple/system/CodeTable/findCodeTables",
                    "/simple/system/CodeTable/findCodeTableForView"
                ]
            },
            {
                "code": "simple_system_CodeTable_Add",
                "name1": "新增码表",
                "fullName": "simple.系统管理.码表.新增",
                "moduleCode": "simple/system/CodeTable",
                "urls": [
                    "/simple/system/CodeTable/createCodeTable",
                    "/simple/system/CodeTable/saveCodeTable",
                    "/simple/system/CodeTable/findCodeTablesWithIdNameByName"
                ]
            }
        ]
    },

 

  其中key,就是模块编码。value就是这个模块里面的一些参数和数据。其中权限是和模块放在一起的,一个模块的权限都集中存放,便于管理。

  在判断权限方面,我们才用遍历的方式,对该用户所具有的权限进行判断,如果满足条件就放行,如果不满足就提示错误。

 if (loginUser != null) {
                boolean hasPermission = ModuleManager.hasPermission(uri, loginUser.getUserRoles());
                if (hasPermission) {
                    return true;
                }
            }

  现在来说一下我自己的看法。

  首先文件存储的话,在获取数据的时候非常的快,优于数据库存储,可以在一定程度上提高系统性能,但是文件存储也有一个致命的弱点,丢失。当所有权限都集中于一个文件的时候,文件一旦丢失,所造成的影响将是致命的。所以灾备十分重要,需定期维护json文件,并且及时备份。同时将业务权限和系统权限分开,减少损失。总之文件存放权限,用得好是一把利剑用不好,将是系统崩溃的主要切入点

 

posted @ 2019-01-12 23:40  幻丶城  阅读(145)  评论(0编辑  收藏  举报