diff --git a/wwwroot/knowledge_bases_list/new_kb_form.ui b/wwwroot/knowledge_bases_list/new_kb_form.ui index 0dffb61..009a3b5 100644 --- a/wwwroot/knowledge_bases_list/new_kb_form.ui +++ b/wwwroot/knowledge_bases_list/new_kb_form.ui @@ -10,8 +10,8 @@ "fields": [ {"name": "name", "label": "名称", "uitype": "str", "required": true}, {"name": "description", "label": "描述", "uitype": "text"}, - {"name": "maintain_roles", "label": "维护角色", "uitype": "str", "tip": "逗号分隔角色名(如 RBACorg.admin);空=同机构登录用户均可维护;*=全部"}, - {"name": "search_roles", "label": "检索角色", "uitype": "str", "tip": "逗号分隔角色名;空=同机构登录用户均可检索/下载;*=全部"}, + {"name": "maintain_roles", "label": "维护角色(可多选)", "uitype": "checkbox", "multicheck": true, "dataurl": "{{entire_url('./role_options.dspy')}}", "valueField": "value", "textField": "text", "tip": "不选=同机构登录用户均可维护"}, + {"name": "search_roles", "label": "检索角色(可多选)", "uitype": "checkbox", "multicheck": true, "dataurl": "{{entire_url('./role_options.dspy')}}", "valueField": "value", "textField": "text", "tip": "不选=同机构登录用户均可检索/下载"}, {"name": "embedding_type", "label": "向量引擎", "uitype": "code", "value": "bge-m3", "dataurl": "{{entire_url('./embedding_options.dspy')}}", "valueField": "value", "textField": "text"} ] } diff --git a/wwwroot/knowledge_bases_list/role_options.dspy b/wwwroot/knowledge_bases_list/role_options.dspy new file mode 100644 index 0000000..878b6d5 --- /dev/null +++ b/wwwroot/knowledge_bases_list/role_options.dspy @@ -0,0 +1,30 @@ +# 角色多选选项:value={orgtypeid}.{name}(与 RBAC 校验格式一致) +ns = params_kw.copy() +db = DBPools() +dbname = get_module_dbname('rag') +opts = [{"value": "*", "text": "*(全部角色)"}] +try: + async with db.sqlorContext(dbname) as sor: + recs = await sor.sqlExe( + "SELECT DISTINCT orgtypeid, name FROM role " + "WHERE orgtypeid IS NOT NULL AND name IS NOT NULL " + "ORDER BY orgtypeid, name LIMIT 60", {}) + await sor.sqlExe("COMMIT", {}) + seen = set() + for r in (recs or []): + o = getattr(r, 'orgtypeid', '') or '' + n = getattr(r, 'name', '') or '' + if not o or not n: + continue + key = o + '.' + n + if key in seen: + continue + seen.add(key) + opts.append({"value": key, "text": key}) + # 机构通配选项 + orgs = sorted({(getattr(r, 'orgtypeid', '') or '') for r in (recs or []) if getattr(r, 'orgtypeid', '')}) + for o in orgs: + opts.append({"value": o + ".*", "text": o + ".*(该机构全部)"}) +except Exception as e: + info('role_options: ' + str(e)) +return json.dumps(opts, ensure_ascii=False)