Skip to content

Discussion and design of Soul-Admin menu and data permission scheme #917

Closed

Description

@nuo-promise

Preamble

As the soul user group grows larger and larger, enterprises attach importance to gateway configuration permissions. The
following is a list of added functions:

  • Authentication for soul-admin login
  • Menu permission control
  • Single-page function button permission control

Preparations

  • JWT (Json Web Token)
  • Shiro

Program Logic

  • Login logic
    • The user name and password of the front-end POST are logged in to/login. If an encrypted token is returned, the logon page is redirected if the token fails.
    • After that, you must add the X-Access-Token field to the header to Access each URL request that requires permissions. For example, X-Access-Token: token, the token is the key.
  • Logic after successful login
    • After the login is successful, the frontend sends a Token to the backend to request the user to use the resource interface. The backend obtains the user name from the token, retrieves the resource and returns it to the frontend.

Sequence Diagram of login and resource acquisition

image

User role permission table structure

  • Use existing user tables.
  • role table field description
Field Description
id unique id
role_name role name
description description
  • user_role table field description
Field Description
id unique id
user_id unique user id
role_id role unique id
  • resource table field description
Field Description
id unique id
parent_id parent menu id
title menu name
name frontend route name
url the url used by frontend route
component the name of frontend component
resource_type resource type 0: main menu 1: submenu 2: function button
sort menu display sorting
icon menu usage icon
is_leaf Entry recursion is judged by whether it is leaf or not
is_route whether it is a route (extended use) 1 yes 0 no
perms for example, sys:user:add/ sys:user:edit
status data status 1 is valid and 0 is invalid
  • permission table structure
Field Description
id unique id
objectId role id or user id
permissionType permission type ROLE role permission, USER user permission
resourceId resource id

image

Plan

  • Role, basic permission data currently does not interact with the page, use SQL to insert the default data, and add later; However, the soul-admin backend provides the corresponding add, delete, modify, and query development interface
  • Logon authentication control is preferred
  • User permission menu acquisition and control

Recommendations

  • Whether you need to provide certain permissions based on the time range for a single user but not for a role. eg: 2020-12-29 13:00:00~2020-12-29 14:00:00 a user has the new plug-in permission, and the timeout expires.

Activity

  1. listart commented on Dec 29, 2020

    @listart

    The menu is a kind of resource, which has the characteristics of tree structure and URI mapping. It is recommended to maintain it independently from the permission table. It is recommended to save the Instance-Level Access String directly with reference to shiro WildcardPermission in the permission table.

    see also: Understanding Permissions in Apache Shiro

  2. nuo-promise commented on Dec 29, 2020

    @nuo-promise
    ContributorAuthor

    The menu is a kind of resource, which has the characteristics of tree structure and URI mapping. It is recommended to maintain it independently from the permission table. It is recommended to save the Instance-Level Access String directly with reference to shiro WildcardPermission in the permission table.

    see also: Understanding Permissions in Apache Shiro

    @yu199195 @dengliming What do you think?

  3. nuo-promise commented on Jan 11, 2021

    @nuo-promise
    ContributorAuthor

    soul-admin login authentication and page permission API documentation

    HTTP/HTTPS message format 

    Overview

    • Common parameters of HTTP/HTTPS communication interfaces

    Request method

    • HTTP GET / POST

    Request Header

    Parameter Type Required Description
    token string no Interface access token

    Request parameters

    GET

    http://host:port/xxx/xxx?xxx=xxx&xxx=xxx

    POST 

    Parameter Type Required Description
    xxx xxx No Business parameters

    Sample request parameters

    {
    	"param1": "xxx",
    	"param2":"xxx",
    	...
    }

    Response paramteters

    Parameter Type Required Description
    code Integer Yes Error code
    message string Yes Error message
    data Object No Business data

    Sample response parameters  

    {
    	"code": 200,
    	"msg":"login success",
    	"data":null/xxx
    }

    **

    Login module

    Login

    Interface Type

    • HTTP/HTTPS

    Description

    • Frontend logon interface

    Request method

    • GET
    • /platform/login

    Request parameters 

    Parameter Type Required Description
    userName string Yes Login username
    password string Yes Login password

    Sample request parameters

    http://localhost:9095/platform/login?userName=admin&password=123456

    Success response parameter DashboardUserV0

    Parameter Type Required Description
    id string Yes primary key
    userName string Yes user name
    password string Yes user password
    role Integer Yes user role
    enabled Boolean Yes enable
    token string Yes token returned successfully
    dateCreated string Yes create time
    dateUpdated string Yes update time

    Sample response parameters

    {
    	"code": 200,
    	"message": "login dashboard user success",
    	"data": {
    		"id": "1",
    		"userName": "admin",
    		"password": "jHcpKkiDbbQh7W7hh8yQSA==",
    		"role": 1,
    		"enabled": true,
            "token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NzI5MjYwMDMsInVzZXJuYW1lIjoiZGptIn0.nSJ1LPh6ZZ9gcjW5TG2XKA2ED7FasPygSOCf5dqHsL4",
    		"dateCreated": "2018-06-23 15:12:22",
    		"dateUpdated": "2020-11-24 12:59:12"
    	}
    }

    Note

    • When the code is 200, the data is parsed. Otherwise, the data is displayed based on the code error code and message error message.

    User module

    Edit user features

    Interface Type

    • HTTP/HTTPS

    Description

    • Obtain user information based on user id

    Request method

    • GET
    • /dashboardUser/{id}

    Request parameters

    Parameter Type Required Description
    id string Yes user primary key

    Sample request parameters

    http://localhost:9095/dashboardUser/xxxxxxx

    Success response parameter DashboardUserV0

    Parameter Type Required Description
    id string Yes user primary key
    userName string Yes user name
    password string Yes user password
    role Integer Yes user role
    enabled Boolean Yes Enable
    roles array Yes returns the current role information and supports the coexistence of multiple roles.
    allRoles array Yes all current roles are returned. The Super Administrator role is not displayed.
    dateCreated string Yes create time
    dateUpdated string Yes update time

    Sample response parameters

    {
        "code": 200,
        "message": "detail success",
        "data": {
            "id": "1348274356818300928",
            "userName": "ding",
            "password": "1",
            "role": 1,
            "enabled": true,
            "dateCreated": "2021-01-10 22:23:51",
            "dateUpdated": "2021-01-10 22:30:27",
            "roles": [
                {
                    "id": "1347926115137064960",
                    "roleName": "admin",
                    "description": "管理员",
                    "dateCreated": "2021-01-09 23:20:04",
                    "dateUpdated": "2021-01-09 23:59:51"
                }
            ],
            "allRoles": [
                {
                    "id": "1347926115137064960",
                    "roleName": "admin",
                    "description": "管理员",
                    "dateCreated": "2021-01-09 23:20:04",
                    "dateUpdated": "2021-01-09 23:59:51"
                }
            ]
        }
    }

    Save user information after editing

    Interface Type

    • HTTP/HTTPS

    Description

    • After editing the user information, save the user information and user role binding information.

    Request method

    • PUT
    • /dashboardUser/{id}

    Request parameters

    Parameter Type Required Description
    userName string Yes user name
    password string No user password
    role int No previous user role (abandoned)
    enabled bool No data is valid
    roles array Yes user's current role ids

    Sample request parameters

    http://localhost:9095/dashboardUser/xxxxxxx

    Response paramteters

    Parameter Type Required Description
    code Integer Yes status code
    message string Yes response Description
    data Object No custom message body

    Sample response parameters

    {
    	"code": 200,
    	"msg":"登录成功",
    	"data":null/xxx
    }

    Role Management Module

    Add roles

    Interface Type

    • HTTP/HTTPS

    Description

    • Add roles

    Request method

    • POST
    • /role

    Request parameters

    Parameter Type Required Description
    roleName string Yes role name
    description string No role description

    Sample request parameters

    {
    	"roleName":"admin",
    	"description":"管理员角色"
    }

    Response paramteters

    Parameter Type Required Description
    code int Yes status code
    message string Yes response Description
    data Object No custom message body

    Sample response parameters

    {
        "message": "添加成功!",
        "code": 200,
        "data": 1,
    }

    View all roles

    Interface Type

    • HTTP/HTTPS

    Description

    • Role list

    Request method

    • GET
    • /role

    Request parameters

    Parameter Type Required Description
    startPage Integer Yes Start Page
    pageSize Integer Yes Size per page

    Sample request parameters

    {
    	"startPage":1,
    	"pageSize":10
    }

    Response paramteters

    Parameter Type Required Description
    message string Yes response description
    code Integer Yes status code
    data Object No Custom message body

    data entity CommonPager -> PageParameter

    Parameter Type Required Description
    currentPage int Yes current page
    prePage int Yes which page is the previous page?
    nextPage int Yes which page is the next page?
    pageSize int Yes the size of each page.
    offset int Yes offset
    totalPage int Yes a total of how many pages
    totalCount int Yes total number of data entries

    **

    data entity CommonPager -> dataList -> data element

    Parameter Type Required Description
    id string Yes Primary key
    roleName string Yes role name
    description string Yes role description
    dateCreated string Yes create time
    dateUpdated string Yes update time

    Sample response parameters

    {
        "message": "获取角色列表成功",
        "code": 200,
        "data": {
            "page": {
                "currentPage":1,
                "prePage":1,
                "nextPage":1,
                "pageSize":12,
                "offset":0,
                "totalPage":1,
                "totalCount":2
            },
            "dataList": [
                {
                    "id": "5dbfc02fb4c30b1cd789971f",
                    "roleName": "super",
                    "description": "内部角色",
                    "dateCreated": "2019-11-04T14:07:43.452+0000",
                    "dateUpdated": null
                },
                {
                    "id": "5dbfc0d4b4c30b1cd7899720",
                    "roleName": "user",
                    "description": "用户角色",
                    "dateCreated": "2019-11-04T14:07:43.452+0000",
                    "dateUpdated": null
                }
            ]
        }
    }

    Obtain the role list when adding a user

    Interface Type

    • HTTP/HTTPS

    Description

    • When you click add user, you must obtain the role list first. The Super permission will not be returned.

    Request method

    • GET
    • /role/getAllRoles

    Sample request parameters

    localhost:9095/role/getAllRoles

    Response paramteters

    Parameter Type Required Description
    code int Yes status code
    message string Yes response description
    data Object No custom message body

    data entity List -> RoleVO

    Parameter Type Required Description
    id string Yes role primary key
    roleName string Yes role name
    description string Yes role description
    dateCreated string Yes create time
    dateUpdated string Yes update time

    Sample response parameters

    {
        "message": "删除成功!",
        "code": 200,
        "data": [
            {
                "id":"dsfsf",
                "roleName":"admin",
                "description":"管理员",
                "dateCreated":"2021-01-01 23:23:23",
                "dateUpdated":"2021-01-01 23:23:23"
            },
            {
                "id":"dsfsf",
                "roleName":"admin1",
                "description":"管理员1",
                "dateCreated":"2021-01-01 23:23:23",
                "dateUpdated":"2021-01-01 23:23:23"
            }
        ]
    }

    View a role

    Interface Type

    • HTTP/HTTPS

    Description

    • View role information by id

    Request method

    • GET
    • /role/{id}

    Request parameters

    Parameter Type Required Description
    id string Yes role primary key

    Sample request parameters

    http://host:port/role?id="5dbfc02fb4c30b1cd789971f"

    Response paramteters

    Parameter Type Required Description
    message string Yes response description
    code int Yes status code
    data Object No custom message body

    data entity

    Parameter Type Required Description
    rolePermissionList array Yes list of existing permissions corresponding to a role
    sysRole object Yes role information
    allPermissionInfo object Yes all permissions

    **

    data entity class - sysRole

    Parameter Type Required Description
    id string Yes primary id
    roleName string Yes role name
    description string Yes role description
    dateCreated string Yes create time
    dateUpdated string Yes update time

    data entity - allPermissionInfo

    Parameter Type Required Description
    treeList array Yes menu tree structure
    permissionIds array Yes list of all permission ids

    data entity - allPermissionInfo-treeList

    Parameter Type Required Description
    id string Yes role primary key
    title string Yes title
    children array Yes child node data
    parentId string Yes parent node
    name string Yes resource name
    isLeaf boolean Yes ndicates whether it is a leaf node. Trigger recursion to add it to the parent node.

    Sample response parameters

    {
        "code": 200,
        "message": "detail success",
        "data": {
            "rolePermissionList": [],
            "sysRole": {
                "id": "1346358560427216896",
                "roleName": "super",
                "description": "超级管理员",
                "dateCreated": "2021-01-05 01:31:10",
                "dateUpdated": "2021-01-05 02:23:13"
            },
            "allPermissionInfo": {
                "treeList": [
                    {
                        "id": "1346775491550474240",
                        "title": "SOUL.MENU.PLUGIN.LIST",
                        "name": "plug",
                        "children": [
                            {
                                "id": "1347026381504262144",
                                "title": "divide",
                                "name": "divide",
                                "children": [
                                    {
                                        "id": "1347050493052071936",
                                        "title": "添加修改divide选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347026381504262144"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347026805170909184",
                                "title": "hystrix",
                                "name": "hystrix",
                                "children": [
                                    {
                                        "id": "1347051850521784320",
                                        "title": "添加修改hyxtrix选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347026805170909184"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027413357572096",
                                "title": "rewrite",
                                "name": "rewrite",
                                "children": [
                                    {
                                        "id": "1347052833968631808",
                                        "title": "添加修改rewrite选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027413357572096"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027482244820992",
                                "title": "springCloud",
                                "name": "springCloud",
                                "children": [
                                    {
                                        "id": "1347053324018528256",
                                        "title": "添加修改springCloud选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027482244820992"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027526339538944",
                                "title": "sign",
                                "name": "sign",
                                "children": [
                                    {
                                        "id": "1347053363814084608",
                                        "title": "添加修改sign选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027526339538944"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027566034432000",
                                "title": "waf",
                                "name": "waf",
                                "children": [
                                    {
                                        "id": "1347053404050042880",
                                        "title": "添加修改waf选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027566034432000"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027647999520768",
                                "title": "rate_limter",
                                "name": "rate_limter",
                                "children": [
                                    {
                                        "id": "1347053442419535872",
                                        "title": "添加修改rate_limiter选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027647999520768"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027717792739328",
                                "title": "dubbo",
                                "name": "dubbo",
                                "children": [
                                    {
                                        "id": "1347053477844627456",
                                        "title": "添加修dubbo选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027717792739328"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027769747582976",
                                "title": "monitor",
                                "name": "monitor",
                                "children": [
                                    {
                                        "id": "1347053516423835648",
                                        "title": "添加修改monitor选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027769747582976"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027830602739712",
                                "title": "sentinel",
                                "name": "sentinel",
                                "children": [
                                    {
                                        "id": "1347053554310983680",
                                        "title": "添加修改sentinel选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027830602739712"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027918121086976",
                                "title": "resilience4j",
                                "name": "resilience4j",
                                "children": [
                                    {
                                        "id": "1347053595729735680",
                                        "title": "添加修改resilience4j选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027918121086976"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347027995199811584",
                                "title": "tars",
                                "name": "tars",
                                "children": [
                                    {
                                        "id": "1347053631159021568",
                                        "title": "添加修改tars选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347027995199811584"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347028169120821248",
                                "title": "context_path",
                                "name": "context_path",
                                "children": [
                                    {
                                        "id": "1347053666227597312",
                                        "title": "添加修改context_path选择器按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1347028169120821248"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346775491550474240"
                            },
                            {
                                "id": "1347063567603609600",
                                "title": "sofa",
                                "name": "sofa",
                                "children": null,
                                "isLeaf": true,
                                "parentId": "1346775491550474240"
                            }
                        ],
                        "isLeaf": false,
                        "parentId": ""
                    },
                    {
                        "id": "1346776175553376256",
                        "title": "SOUL.MENU.SYSTEM.MANAGMENT",
                        "name": "system",
                        "children": [
                            {
                                "id": "1346777157943259136",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.USER",
                                "name": "manage",
                                "children": [
                                    {
                                        "id": "1347032308726902784",
                                        "title": "添加用户按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1346777157943259136"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346776175553376256"
                            },
                            {
                                "id": "1346777449787125760",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.PLUGIN",
                                "name": "plugin",
                                "children": [
                                    {
                                        "id": "1347034027070337024",
                                        "title": "查询插件按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1346777449787125760"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346776175553376256"
                            },
                            {
                                "id": "1346777623011880960",
                                "title": "SOUL.PLUGIN.PLUGINHANDLE",
                                "name": "pluginhandle",
                                "children": [
                                    {
                                        "id": "1347047555588042752",
                                        "title": "查询插件处理按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1346777623011880960"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346776175553376256"
                            },
                            {
                                "id": "1346777766301888512",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.AUTHEN",
                                "name": "auth",
                                "children": [
                                    {
                                        "id": "1347048004105940992",
                                        "title": "查询认证按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1346777766301888512"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346776175553376256"
                            },
                            {
                                "id": "1346777907096285184",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.METADATA",
                                "name": "metadata",
                                "children": [
                                    {
                                        "id": "1347048968414179328",
                                        "title": "查询元数据按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1346777907096285184"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346776175553376256"
                            },
                            {
                                "id": "1346778036402483200",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.DICTIONARY",
                                "name": "dict",
                                "children": [
                                    {
                                        "id": "1347049542417264640",
                                        "title": "查询字典按钮",
                                        "name": "",
                                        "children": null,
                                        "isLeaf": true,
                                        "parentId": "1346778036402483200"
                                    }
                                ],
                                "isLeaf": false,
                                "parentId": "1346776175553376256"
                            }
                        ],
                        "isLeaf": false,
                        "parentId": ""
                    }
                ],
                "permissionIds": [
                    "1346775491550474240",
                    "1346776175553376256",
                    "1346777157943259136",
                    "1346777449787125760",
                    "1346777623011880960",
                    "1346777766301888512",
                    "1346777907096285184",
                    "1346778036402483200"
                ]
            }
        }
    }

    Delete a role

    Interface Type

    • HTTP/HTTPS

    Description

    • Delete multiple roles

    Request method

    • DELETE
    • /role/batch

    Request parameters

    Parameter Type Required Description
    ids List Yes role ids

    Sample request parameters

    [xxxx,xxxxx,xxxxx] 角色 ID

    Response paramteters

    Parameter Type Required Description
    code int Yes status code
    message string Yes response description
    data Object No custom message body

    Sample response parameters

    {
        "message": "删除成功!",
        "code": 200,
        "data": 1
    }

    Update roles

    Interface Type

    • HTTP/HTTPS

    Description

    • Update role information

    Request method

    • PUT
    • /role/{id}

    Request parameters

    Parameter Type Required Description
    id string No role id
    roleName String No role name
    description string No description
    currentPermissionIds array Yes the list of permission ids after editing.

    Sample request parameters

    {
        "roleName":"super",
        "currentPermissionIds":[
            "1346775491550474240",
                    "1346776175553376256",
                    "1346777157943259136",
                    "1346777449787125760",
                    "1346777623011880960",
                    "1346777766301888512"
                     ]
    }

    Response paramteters

    Parameter Type Required Description
    message string Yes response description
    code int Yes status code
    data Object No custom message body

    Sample response parameters

    {
        "message": "编辑成功!",
        "code": 200,
        "data": 1,
    }

    Permission management module

    Obtain menu permissions

    Interface Type

    • HTTP/HTTPS

    Description

    • Obtain user menus and permissions based on the Token

    Request method

    • GET
    • /permission/getUserPermissionByToken

    Request parameters

    Parameter Type Required Description
    token string Yes token for successful login

    **
    Sample request parameters

    /permission/getUserPermissionByToken?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NzI5MjYwMDMsInVzZXJuYW1lIjoiZGptIn0.nSJ1LPh6ZZ9gcjW5TG2XKA2ED7FasPygSOCf5dqHsL4

    Response paramteters

    Parameter Type Required Description
    code int Yes status code
    message string Yes response description
    data Object No custom message body

    data entity

    Parameter Type Required Description
    menu array Yes menu list
    currentAuth array Yes list of available permissions for the current user
    allAuth array Yes list of all system permissions

    data entity - allAuth/auth

    Parameter Type Required Description
    perms string Yes function permission encoding
    description string Yes Description

    perms : sys:user:add 控制码

    data entity - menu

    Parameter Type Required Description
    id string Yes menu id
    name string Yes route Name
    url string Yes Url
    component string Yes Components
    meta object Yes Property
    children array Yes submenu node
    sort integer Yes menu sort

    data entity - menu->meta

    Parameter Type Required Description
    icon string Yes Icon
    title string Yes title

    Sample response parameters 

    {
        "code": 200,
        "message": "get menu and permission success",
        "data": {
            "menu": [
                {
                    "id": "1346776175553376256",
                    "name": "system",
                    "url": "/system",
                    "component": "system",
                    "meta": {
                        "icon": "setting",
                        "title": "SOUL.MENU.SYSTEM.MANAGMENT"
                    },
                    "children": [
                        {
                            "id": "1346777766301888512",
                            "name": "auth",
                            "url": "/system/auth",
                            "component": "auth",
                            "meta": {
                                "icon": "",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.AUTHEN"
                            },
                            "children": [],
                            "sort": 3
                        },
                        {
                            "id": "1346777157943259136",
                            "name": "manage",
                            "url": "/system/manage",
                            "component": "manage",
                            "meta": {
                                "icon": "",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.USER"
                            },
                            "children": [],
                            "sort": 0
                        },
                        {
                            "id": "1346777623011880960",
                            "name": "pluginhandle",
                            "url": "/system/pluginhandle",
                            "component": "pluginhandle",
                            "meta": {
                                "icon": "",
                                "title": "SOUL.PLUGIN.PLUGINHANDLE"
                            },
                            "children": [],
                            "sort": 2
                        },
                        {
                            "id": "1346778036402483200",
                            "name": "dict",
                            "url": "/system/dict",
                            "component": "dict",
                            "meta": {
                                "icon": "",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.DICTIONARY"
                            },
                            "children": [],
                            "sort": 5
                        },
                        {
                            "id": "1346777449787125760",
                            "name": "plugin",
                            "url": "/system/plugin",
                            "component": "plugin",
                            "meta": {
                                "icon": "",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.PLUGIN"
                            },
                            "children": [],
                            "sort": 1
                        },
                        {
                            "id": "1346777907096285184",
                            "name": "metadata",
                            "url": "/system/metadata",
                            "component": "metadata",
                            "meta": {
                                "icon": "",
                                "title": "SOUL.MENU.SYSTEM.MANAGMENT.METADATA"
                            },
                            "children": [],
                            "sort": 4
                        }
                    ],
                    "sort": 1
                }
            ],
            "currentAuth": [
                {
                    "perms": "plugin:dubboSelector:add",
                    "description": "添加修dubbo选择器按钮"
                },
                {
                    "perms": "plugin:sofaSelector:delete",
                    "description": "删除sofa选择器按钮"
                }
            ],
            "allAuth": [
                {
                    "perms": "system:manager:add",
                    "description": "添加用户按钮"
                },
                {
                    "perms": "system:manager:list",
                    "description": "查询用户按钮"
                }
            ]
        }
    }
  4. HessTina-YuI commented on Jan 11, 2021

    @HessTina-YuI
    Member

    Client permission

    Shiro configuration

    Define shiro's white list

    In application.yml

    soul:
        shiro:
            white-list: /platform/login

    Using comma to split white list, like:

    soul:
        shiro:
            white-list: /platform/login,/platform/enum

    If you want to allow the same route to request server, like:

    soul:
        shiro:
            white-list: /platform/**

    When token is error, the server will response:

    {
        "code": 600,
        "message": "token is error" 
    }

    Define permission

    For example:

    @RequiresPermissions("system:enums:admin")
    @GetMapping("/enum")
    public SoulAdminResult queryEnums() {
        return SoulAdminResult.success(enumService.list());
    }

    In @RequiresPermissions, fill in permission. The format is @RequiresPermissions("xxx:xxx:xxx"), also @RequiresPermissions({"xxx:xxx:xxx", "yyy:yyy:yyy"})

    When token has no permission, the server will response:

    {
        "code": 601,
        "message": "token has no permission"
    }

    JWT

    org.dromara.soul.admin.utils.JwtUtils is JWT 的 tool class

    In application.yml, to configurate attribute

    soul:
        jwt:
            key: 2095132720951327

    Current stage, JwtUtils has two method.

    • Acquire user name
    public static String getIssuer(final String token) {}
    • Acquire generation token's time
    public static LocalDate getIssuerDate(final String token) {}
  5. added 2 commits that reference this issue on Jan 18, 2021
  6. added this to the milestone on Jan 18, 2021
  7. linked a pull request that will close this issue[#917] soul-admin Permission Complete #998on Jan 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions