权限管理

介绍

Oui 将权限分为权限组,每个权限组里面又分为权限类,每个权限类由多个匹配项构成。每个用户需要为其分配一个权限组。

Oui 默认具有一个名为 admin 的权限组,其配置文件为:/usr/share/oui/acl/admin.json

{
    "rpc": {
        "matchs": [".+"]
    },
    "menu": {
        "matchs": [".+"]
    },
    "ubus": {
        "matchs": [".+"]
    },
    "uci": {
        "matchs": [".+"]
    }
}

目前共有 4 个权限类:

  • rpc - rpc 接口调用权限
  • menu - 菜单隐藏或显示
  • ubus - ubus 调用权限
  • uci - uci 操作权限

匹配项为一个数组,admin 权限组中全部的匹配项均为 .+,表示匹配任意,即每一类都拥有所有权限。

提示

这里的匹配项事实上为一个正则表达式。可以是任意的 Lua 正则表达式。

反向匹配

{
    "rpc": {
        "matchs": ["^uci.get$"],
        "reverse": true
    }
}

给权限类的 reverse 属性设置为 true 即可反向匹配。

匹配项示例

rpc

{
    "rpc": {
        "matchs": [".+"]
    }
}

匹配所有 rpc 接口

{
    "rpc": {
        "matchs": ["^uci%..+"]
    }
}

匹配 uci 模块里面所有的方法

{
    "rpc": {
        "matchs": ["^uci%..+", "^system%..+"]
    }
}

匹配 ucisystem 模块里面所有的方法

{
    "rpc": {
        "matchs": ["^uci%.get$"]
    }
}

匹配 uci 模块里面的 get 方法

{
    "rpc": {
        "matchs": ["^uci%.get$"],
        "reverse": true
    }
}

不匹配 uci 模块的 get 方法,即除了 uci 模块的 get 方法不能调用,其余所有接口均能调用。

{
    "menu": {
        "matchs": ["^/system/"]
    }
}

匹配 /system/ 开头的菜单

{
    "menu": {
        "matchs": ["^/system/upgrade$"]
    }
}

匹配 /system/upgrade 菜单

{
    "menu": {
        "matchs": ["^/system/upgrade$"],
        "reverse": true
    }
}

隐藏 /system/upgrade 菜单

uci

{
    "uci": {
        "matchs": ["^system$"]
    }
}

只允许操作 /etc/config/system