static void role(int argc, char **argv)
{
    HttpAuth    *auth;
    HttpRole    *role;
    MprJson     *abilities;
    MprBuf      *buf;
    MprKey      *kp;
    cchar       *cmd, *def, *key, *rolename;

    if ((auth = app->route->auth) == 0) {
        fail("Authentication not configured in package.json");
        return;
    }
    if (argc < 2) {
        usageError();
        return;
    }
    cmd = argv[0];
    rolename = argv[1];

    if (smatch(cmd, "remove")) {
        key = sfmt("app.http.auth.roles.%s", rolename);
        if (mprRemoveJson(app->config, key) < 0) {
            fail("Cannot remove %s", key);
            return;
        }
        if (!app->noupdate) {
            savePackage();
            trace("Remove", "Role %s", rolename);
        }
        return;

    } else if (smatch(cmd, "add")) {
        if (smatch(cmd, "add")) {
            def = sfmt("[%s]", sjoinArgs(argc - 2, (cchar**) &argv[2], ","));
            abilities = mprParseJson(def);
            key = sfmt("app.http.auth.roles.%s", rolename);
            if (mprWriteJsonObj(app->config, key, abilities) < 0) {
                fail("Cannot update %s", key);
                return;
            }
            savePackage();
            if (!app->noupdate) {
                trace("Update", "Role %s", rolename);
            }
        }
        if (app->show) {
            trace("Info", "%s %s", rolename, sjoinArgs(argc - 2, (cchar**) &argv[3], " "));
        }
    } else if (smatch(cmd, "show")) {
        if ((role = httpLookupRole(app->route->auth, rolename)) == 0) {
            fail("Cannot find role %s", rolename);
            return;
        }
        buf = mprCreateBuf(0, 0);
        for (ITERATE_KEYS(role->abilities, kp)) {
            mprPutToBuf(buf, "%s ", kp->key);
        }
        trace("Info", "%s %s", role->name, mprBufToString(buf));
    }
}
NVD is only using a subset of CWE for mapping instead of the entire CWE, and the weakness type is not covered by that subset.