feat: users CRUD 定制 api — 新增/编辑客制化逻辑
不修改生成文件,改为 json/users.json 指定 custom URLs: - new_data_url → /rbac/api/add_user.dspy - update_data_url → /rbac/api/update_user.dspy 客制化修复: 1. 新增用户: created_at 默认当天日期 2. 新增/编辑: 清除 Tabular 发送的 _text 后缀字段 3. 编辑: 密码为空时不覆盖原密码
This commit is contained in:
parent
9472c0995f
commit
ad601403cf
@ -2,6 +2,8 @@
|
|||||||
"tblname": "users",
|
"tblname": "users",
|
||||||
"title":"用户",
|
"title":"用户",
|
||||||
"params": {
|
"params": {
|
||||||
|
"new_data_url": "{{entire_url('/rbac/api/add_user.dspy')}}",
|
||||||
|
"update_data_url": "{{entire_url('/rbac/api/update_user.dspy')}}",
|
||||||
"sortby":"username",
|
"sortby":"username",
|
||||||
"confidential_fields":["password"],
|
"confidential_fields":["password"],
|
||||||
"logined_userorgid":"orgid",
|
"logined_userorgid":"orgid",
|
||||||
|
|||||||
58
wwwroot/api/add_user.dspy
Normal file
58
wwwroot/api/add_user.dspy
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
|
||||||
|
ns = params_kw.copy()
|
||||||
|
for k,v in ns.items():
|
||||||
|
if v == 'NaN' or v == 'null':
|
||||||
|
ns[k] = None
|
||||||
|
# remove _text suffix fields sent by Tabular (not real DB columns)
|
||||||
|
for k in list(ns.keys()):
|
||||||
|
if k.endswith('_text'):
|
||||||
|
ns.pop(k, None)
|
||||||
|
id = params_kw.id
|
||||||
|
if not id or len(id) > 32:
|
||||||
|
id = uuid()
|
||||||
|
ns['id'] = id
|
||||||
|
|
||||||
|
if params_kw.get('password'):
|
||||||
|
ns['password'] = password_encode(params_kw.get('password'))
|
||||||
|
|
||||||
|
ns['created_at'] = curDateString()
|
||||||
|
|
||||||
|
userorgid = await get_userorgid()
|
||||||
|
if not userorgid:
|
||||||
|
return {
|
||||||
|
"widgettype":"Error",
|
||||||
|
"options":{
|
||||||
|
"title":"Authorization Error",
|
||||||
|
"timeout":3,
|
||||||
|
"cwidth":16,
|
||||||
|
"cheight":9,
|
||||||
|
"message":"Please login"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ns['orgid'] = userorgid
|
||||||
|
|
||||||
|
db = DBPools()
|
||||||
|
dbname = get_module_dbname('rbac')
|
||||||
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
r = await sor.C('users', ns.copy())
|
||||||
|
return {
|
||||||
|
"widgettype":"Message",
|
||||||
|
"options":{
|
||||||
|
"cwidth":16,
|
||||||
|
"cheight":9,
|
||||||
|
"title":"Add Success",
|
||||||
|
"timeout":3,
|
||||||
|
"message":"ok"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"widgettype":"Error",
|
||||||
|
"options":{
|
||||||
|
"title":"Add Error",
|
||||||
|
"cwidth":16,
|
||||||
|
"cheight":9,
|
||||||
|
"timeout":3,
|
||||||
|
"message":"failed"
|
||||||
|
}
|
||||||
|
}
|
||||||
78
wwwroot/api/update_user.dspy
Normal file
78
wwwroot/api/update_user.dspy
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
|
||||||
|
ns = params_kw.copy()
|
||||||
|
for k,v in ns.items():
|
||||||
|
if v == 'NaN' or v == 'null':
|
||||||
|
ns[k] = None
|
||||||
|
# remove _text suffix fields sent by Tabular (not real DB columns)
|
||||||
|
for k in list(ns.keys()):
|
||||||
|
if k.endswith('_text'):
|
||||||
|
ns.pop(k, None)
|
||||||
|
|
||||||
|
userorgid = await get_userorgid()
|
||||||
|
if not userorgid:
|
||||||
|
return {
|
||||||
|
"widgettype":"Error",
|
||||||
|
"options":{
|
||||||
|
"title":"Authorization Error",
|
||||||
|
"timeout":3,
|
||||||
|
"cwidth":16,
|
||||||
|
"cheight":9,
|
||||||
|
"message":"Please login"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ns['orgid'] = userorgid
|
||||||
|
|
||||||
|
|
||||||
|
if params_kw.get('password'):
|
||||||
|
ns['password'] = password_encode(params_kw.get('password'))
|
||||||
|
else:
|
||||||
|
ns.pop('password', None)
|
||||||
|
|
||||||
|
|
||||||
|
db = DBPools()
|
||||||
|
dbname = get_module_dbname('rbac')
|
||||||
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
|
ns1 = {
|
||||||
|
|
||||||
|
"orgid": userorgid,
|
||||||
|
|
||||||
|
|
||||||
|
"id": params_kw.id
|
||||||
|
}
|
||||||
|
recs = await sor.R('users', ns1)
|
||||||
|
if len(recs) < 1:
|
||||||
|
return {
|
||||||
|
"widgettype":"Error",
|
||||||
|
"options":{
|
||||||
|
"title":"Update Error",
|
||||||
|
"cwidth":16,
|
||||||
|
"cheight":9,
|
||||||
|
"timeout":3,
|
||||||
|
"message":"Record no exist or with wrong ownership"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
r = await sor.U('users', ns)
|
||||||
|
debug('update success');
|
||||||
|
return {
|
||||||
|
"widgettype":"Message",
|
||||||
|
"options":{
|
||||||
|
"title":"Update Success",
|
||||||
|
"cwidth":16,
|
||||||
|
"cheight":9,
|
||||||
|
"timeout":3,
|
||||||
|
"message":"ok"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"widgettype":"Error",
|
||||||
|
"options":{
|
||||||
|
"title":"Update Error",
|
||||||
|
"cwidth":16,
|
||||||
|
"cheight":9,
|
||||||
|
"timeout":3,
|
||||||
|
"message":"failed"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user