diff --git a/app/common/model.py b/app/common/model.py index 6ec26a081e8ef18df829eaad58e477208433066a..c0427757d95b28708f8ba4ef61adfba9811c4c0d 100644 --- a/app/common/model.py +++ b/app/common/model.py @@ -11,6 +11,7 @@ class model_app_role(modelsqliteintapp): table="role" fields={ "id":model.dbtype.int(LEN=11,PRI=True,A_L=True), #设置id为自增主键 + "admin_id":model.dbtype.int(LEN=11,DEFAULT=0), "icon":model.dbtype.varchar(LEN=128,DEFAULT=''), "title":model.dbtype.varchar(LEN=128,DEFAULT=''), "describes":model.dbtype.varchar(LEN=256,DEFAULT=''), @@ -24,7 +25,7 @@ try: except: model_app_role=model_app_role() model_app_role.create_table() - sqlite("role",model_app_path).insert({"icon":"","title":"开拓者","describes":"该角色具备了所有的权限,甚至可以毁灭整个系统","types":"system","roleroute":"[]","updtime":times(),"addtime":times()}) + sqlite("role",model_app_path).insert({"icon":"","admin_id":0,"title":"开拓者","describes":"该角色具备了所有的权限,甚至可以毁灭整个系统","types":"system","roleroute":"[]","updtime":times(),"addtime":times()}) class model_app_admin(modelsqliteintapp): "管理员" table="admin" diff --git a/app/intapp/controller/index/admin.py b/app/intapp/controller/index/admin.py index 0be0a19e1c5b5e0f0bdc9a262a18a6fbe12adb75..fd82b76701b51ed460351b4c6b623216d1f70c93 100644 --- a/app/intapp/controller/index/admin.py +++ b/app/intapp/controller/index/admin.py @@ -10,16 +10,19 @@ def setadminpwd(): else: return successjson({"username":username,"password":password}) def index(): + G.setadminlog="管理员入口" if sysisphone(): return response.tpl("../tplm/admin/index") else: return response.tpl() def admin(): + G.setadminlog="管理员页面" if sysisphone(): return response.tpl("../tplm/admin/admin") else: return response.tpl() def role(): + G.setadminlog="权限页面" if sysisphone(): return response.tpl("../tplm/admin/role") else: @@ -30,13 +33,13 @@ def adminlog(): else: return response.tpl() def logdeta(id): - "日志明细" + G.setadminlog="日志明细" data=sqlite("admin_log t1",model_app_path).field("t1.*,t2.icon,t2.name,t2.phone").join("admin t2","t1.user_id=t2.id","LEFT").where("t1.id",id).find() data['routeparamarr']=json_decode(data['routeparam']) data['dataparamarr']=json_decode(data['dataparam']) return successjson(data) def loglist(): - "日志列表" + G.setadminlog="日志列表" where="1=1" kw=request.args.get('kw') types=request.args.get('types') @@ -59,22 +62,29 @@ def loglist(): count=sqlite("admin_log t1",model_app_path).join("admin t2","t1.user_id=t2.id","LEFT").where(where).count() data=return_list(lists,count,pagenow,pagesize) return successjson(data) -def deletelog(id=0): - "删除日志" - G.setadminlog="删除日志" +def deletelogs(id=0): + G.setadminlog="清空日志" if id: sqlite("admin_log",model_app_path).where('id',id).delete() return successjson() else: try: - id=request.get_json() - sqlite("admin_log",model_app_path).where('id','in',id).delete() + sqlite("admin_log",model_app_path).where("1=1").delete() except: return errorjson(msg="失败") else: return successjson() +def deletelog30(id=0): + G.setadminlog="删除30天前的日志" + try: + id=request.get_json() + sqlite("admin_log",model_app_path).where('addtime','<',times()-86400*30).delete() + except: + return errorjson(msg="失败") + else: + return successjson() def getpluglist(modular="intapp"): - "本地插件列表" + G.setadminlog="本地插件列表" path="app/"+modular+"/controller/" lis=os.listdir(path) lists=[] @@ -92,6 +102,28 @@ def getpluglist(modular="intapp"): # del data[i] i+=1 return successjson(data) +def getmypluglist(modular="intapp"): + "本地插件列表,当前用户拥有的权限" + path="app/"+modular+"/controller/" + lis=os.listdir(path) + lists=[] + for k in lis: + if not os.path.isfile(path+k) and '__' not in k: + lists.append(k) + data=sqlite('plug',model_app_path).select() + i=0 + for k in data: + role=json_decode(k['role']) + if G.userinfo['role']['id']==1: + data[i]['role']=role + else: + role1=[] + for k in role: + if k['value'] in G.userinfo['role']['roleroute']: + role1.append(k) + data[i]['role']=role1 + i+=1 + return successjson(data) def dellogin(): G.setadminlog="退出所有会话" shutil.rmtree(config.session['path']) @@ -122,6 +154,10 @@ def insert(): G.setadminlog="添加管理员" try: data=request.get_json() + if sqlite("admin",model_app_path).where("phone",data['phone']).count(): + return errorjson(msg="该手机已添加") + if sqlite("admin",model_app_path).where("username",data['username']).count(): + return errorjson(msg="该用户名已添加") if not data['username'] or not data['password']: return errorjson(msg="请输入用户名或密码") data.update(logintime=times(),addtime=times()) @@ -153,14 +189,30 @@ def update(id=0): if not id: id=data['id'] try: - data.pop('logintime') - data.pop('addtime') - data.pop('password') del data['title'] del data['describes'] - except:pass + del data['logintime'] + del data['addtime'] + del data['password'] + if G.userinfo['role']['id']!=1: + del data['phone'] + del data['username'] + del data['nickname'] + del data['name'] + del data['icon'] + + except Exception as e: + return errorjson(msg="失败"+str(e)) else: - sqlite("admin",model_app_path).where("id",id).update(data) + if G.userinfo['role']['id']==1: + sqlite("admin",model_app_path).where("id",id).update(data) + else: + if id==1: + return errorjson(msg="您没有权限修改此账号") + if data['role']==G.userinfo['role']['id'] or sqlite("role",model_app_path).where("admin_id="+str(G.userinfo['id'])+" and id="+str(data['role'])).count(): + sqlite("admin",model_app_path).where("id",id).update(data) + else: + return errorjson(msg="您没有其他角色的权限") return successjson() def setpwd(): "设置管理员登录密码" @@ -182,16 +234,22 @@ def setmypwd(): return errorjson(msg="设置失败") else: return successjson() -def getrolelist(id=0): +def getrolelist(id=0,roleroute=1): "获取角色" + id=int(id) + roleroute=int(roleroute) if id: return successjson(sqlite("role",model_app_path).find(id)) - where=None + if G.userinfo['role']['id']==1: + where='1=1' + else: + where="t1.id="+str(G.userinfo['role']['id'])+" or t1.admin_id="+str(G.userinfo['id']) kw=request.args.get('kw') pagenow=request.args.get('pagenow') pagesize=request.args.get('pagesize') if kw: - where=[("title","like","%"+str(kw)+"%")] + # where=[("title","like","%"+str(kw)+"%"),'and',('admin_id','eq',G.userinfo['id'])] + where+=" and t1.title like '%"+str(kw)+"%'" if not pagenow: pagenow=1 else: @@ -200,27 +258,58 @@ def getrolelist(id=0): pagesize=10 else: pagesize=int(pagesize) - lists=sqlite("role",model_app_path).where(where).page(pagenow,pagesize).select() - for k in lists: - k['roleroute']=json_decode(k['roleroute']) - count=sqlite("role",model_app_path).where(where).count() + if roleroute: + lists=sqlite("role t1",model_app_path).join("admin t2","t1.admin_id=t2.id","left").field("t1.*,t2.name").where(where).page(pagenow,pagesize).select() + else: + lists=sqlite("role t1",model_app_path).join("admin t2","t1.admin_id=t2.id","left").field("t1.id,t1.admin_id,t1.icon,t1.title,t1.describes,t1.types,t1.updtime,t1.addtime,t2.name").where(where).select() + if roleroute: + for k in lists: + k['roleroute']=json_decode(k['roleroute']) + count=sqlite("role t1",model_app_path).where(where).count() data=return_list(lists,count,pagenow,pagesize) return successjson(data) def insertrole(): G.setadminlog="添加角色" try: data=request.get_json() + data['admin_id']=G.userinfo['id'] data.update(updtime=times(),addtime=times()) + data['roleroute']=list(set(data['roleroute'])) data['roleroute']=json_encode(data['roleroute']) sqlite("role",model_app_path).insert(data) except: return errorjson(msg="失败") else: return successjson() +# def aa(): +# a=[1,2,3,4] +# i=0 +# for k in a: +# if k==3: +# del a[i] +# i+=1 +# print(a) def updaterole(id=0): "更新内容" G.setadminlog="修改角色权限" data=request.get_json() + del data['name'] + del data['admin_id'] + data['roleroute']=list(set(data['roleroute'])) + plug=sqlite('plug',model_app_path).select() + i=0 + for d in data['roleroute']: + t=False + for k in plug: + role=json_decode(k['role']) + for kk in role: + if d==kk['value']: + t=True + if not t: + del data['roleroute'][i] + i+=1 + + if not id: id=data['id'] id=int(id) @@ -229,10 +318,17 @@ def updaterole(id=0): try: data.pop('updtime') data.pop('addtime') + data['roleroute']=json_encode(data['roleroute']) except:pass else: - sqlite("role",model_app_path).where("id",id).update(data) + if G.userinfo['role']['id']==1: + sqlite("role",model_app_path).where("id",id).update(data) + else: + if sqlite("role",model_app_path).where("id="+str(id)+" and admin_id="+str(G.userinfo['id'])).update(data): + return successjson() + else: + return errorjson(msg="该记录权限不足") return successjson() def deleterole(): "批量删除" @@ -242,7 +338,13 @@ def deleterole(): try: id.remove(1) except:pass - sqlite("role",model_app_path).where('id','in',id).delete() + if G.userinfo['role']['id']==1: + sqlite("role",model_app_path).where('id','in',id).delete() + else: + ids='0' + for k in id: + ids+=","+str(k) + sqlite("role",model_app_path).where("id in ("+ids+") and admin_id="+str(G.userinfo['id'])).delete() except: return errorjson(msg="失败") else: diff --git a/app/intapp/controller/index/index.py b/app/intapp/controller/index/index.py index 25f4344819bdcde13e6ec5d263f62c632a2d910b..4495464a42386338479193888aecf416b7efeada 100644 --- a/app/intapp/controller/index/index.py +++ b/app/intapp/controller/index/index.py @@ -85,11 +85,12 @@ def disk():#磁盘分区和使用情况 }) partitions=psutil.disk_partitions() for v in partitions: - disk_usage=psutil.disk_usage(v[0]) - if disk_usage[0]: - partition.append({ - 'name':v[0],'type':v[2],'count':disk_usage[0],'used':disk_usage[1],'free':disk_usage[2],'userate':disk_usage[3] - }) + if v[2]: + disk_usage=psutil.disk_usage(v[0]) + if disk_usage[0]: + partition.append({ + 'name':v[0],'type':v[2],'count':disk_usage[0],'used':disk_usage[1],'free':disk_usage[2],'userate':disk_usage[3] + }) return successjson({ 'partitions':partition, #磁盘分区和使用情况 'io':psutil.disk_io_counters() diff --git a/app/intapp/controller/index/role.txt b/app/intapp/controller/index/role.txt index 4bbe3061daf21117b66dc573c59ffb3614af8760..15c561bcd28bbd420b6eaad1dbacfbedf7447e45 100644 --- a/app/intapp/controller/index/role.txt +++ b/app/intapp/controller/index/role.txt @@ -14,8 +14,10 @@ shell执行能力,/intapp/index/index/shell 操作日志页面,/intapp/index/admin/adminlog 日志列表,/intapp/index/admin/loglist 日志明细,/intapp/index/admin/logdeta -删除日志,/intapp/index/admin/deletelog +清空日志,/intapp/index/admin/deletelogs +删除30天前的日志,/intapp/index/admin/deletelog30 路由列表,/intapp/index/admin/getpluglist +当前用户拥有的权限,/intapp/index/admin/getmypluglist 管理员列表,/intapp/index/admin/getlist 添加管理员,/intapp/index/admin/insert 删除管理员,/intapp/index/admin/delete diff --git a/app/intapp/controller/index/setup.py b/app/intapp/controller/index/setup.py index c532d5781df8434857a6e1310d8b2d0dc5a0ea7c..064e114cd45d7af8ff09ddcdac7de50df81b47d2 100644 --- a/app/intapp/controller/index/setup.py +++ b/app/intapp/controller/index/setup.py @@ -38,6 +38,9 @@ def restart(types='stop'): if data['types']=='python3.6': if not os.path.isfile("/usr/bin/"+interpreter): os.system("ln -s /usr/local/python/python3.6/bin/python3 /usr/bin/"+interpreter) + elif data['types']=='npm': + if not os.path.isfile("/usr/bin/"+interpreter): + os.system("ln -s /usr/local/nodejs/nodejs14.16/bin/npm /usr/bin/"+interpreter) elif data['types']=='php7.2': if os.path.isfile("/usr/local/php/php7.2/bin/php"): os.system("ln -s /usr/local/php/php7.2/bin/php /usr/bin/"+interpreter) @@ -58,7 +61,10 @@ def restart(types='stop'): else: return errorjson(msg="启动失败") elif types=='stop': - os.system("pkill -9 "+interpreter[:12]) + if data['types']=='npm': + os.system("pkill -9 node") + else: + os.system("pkill -9 "+interpreter[:12]) return successjson() def setpythonrun(): "设置/添加项目管理" @@ -70,6 +76,8 @@ def setpythonrun(): if not os.path.isfile("/usr/bin/"+interpreter): if data['types']=='python3.6': os.system("ln -s /usr/local/python/python3.6/bin/python3 /usr/bin/"+interpreter) + elif data['types']=='npm': + os.system("ln -s /usr/local/nodejs/nodejs14.16/bin/npm /usr/bin/"+interpreter) elif data['types']=='php7.2': if os.path.isfile("/usr/local/php/php7.2/bin/php"): os.system("ln -s /usr/local/php/php7.2/bin/php /usr/bin/"+interpreter) diff --git a/app/intapp/controller/index/tpl/admin/admin.html b/app/intapp/controller/index/tpl/admin/admin.html index ef6bb2a7f068d4b45255ce8b05c305449338d9f2..aaff5d536358b445b900605c9be9a470c8feff42 100644 --- a/app/intapp/controller/index/tpl/admin/admin.html +++ b/app/intapp/controller/index/tpl/admin/admin.html @@ -41,8 +41,8 @@ @@ -99,7 +99,11 @@ - {{item.title}} + + {{item.name}} + 系统 +  创建的=>  + {{item.title}} @@ -198,7 +202,7 @@ var vm = new Vue({ }, getrolelist:function(){ self=this - self.get("/intapp/index/admin/getrolelist",{'kw':self.kw,'pagesize':self.data.pagesize,'pagenow':self.data.pagenow},'获取中...').then(function(res){ + self.get("/intapp/index/admin/getrolelist/0/0",{'kw':self.kw,'pagesize':self.data.pagesize,'pagenow':self.data.pagenow},'获取中...').then(function(res){ self.rolelist=res.data.lists self.getlist() }) diff --git a/app/intapp/controller/index/tpl/admin/adminlog.html b/app/intapp/controller/index/tpl/admin/adminlog.html index b69e6d911fb8d502e5304c1318ba7f9dfe2273f8..5ab5f3be070b10e54f8a259c7b897b25ae4942e0 100644 --- a/app/intapp/controller/index/tpl/admin/adminlog.html +++ b/app/intapp/controller/index/tpl/admin/adminlog.html @@ -76,7 +76,8 @@
-    删除选中  +    清空  +    删除30天前的日志  搜索 - 添加角色 + 添加角色
+ + + @@ -47,7 +53,7 @@    删除选中 
@@ -111,7 +117,7 @@ var vm = new Vue({ self=this self.get("/intapp/index/admin/getrolelist",{'kw':self.kw,'pagesize':self.data.pagesize,'pagenow':self.data.pagenow},'获取中...').then(function(res){ self.data=res.data - self.get("/intapp/index/admin/getpluglist").then(function(res){ + self.get("/intapp/index/admin/getmypluglist").then(function(res){ self.getpluglist=[] for(var i=0;i
- - - - - - - - - python3.6解释器 + npm运行 php7.2解释器 php7.3解释器
您必须提前在“软件管理”中安装php7.2,已安装请忽略,其他安装方式将无效 您必须提前在“软件管理”中安装php7.3,已安装请忽略,其他安装方式将无效
+ + + + + + + + + + @@ -252,7 +254,10 @@ VUE = new Vue({ }, setpythonrun:function(){ self=this - if(!self.admin.types||!self.admin.paths||!self.admin.filename||!self.admin.title){ + if(self.admin.types=='npm'){ + self.filename=''; + } + if(!self.admin.types||!self.admin.paths||!self.admin.title){ self.$message({type: 'error',message: '输入不全!'}); return } self.post("/intapp/index/setup/setpythonrun",self.admin,"请稍后...").then(function(res){ diff --git a/kcweb/Events.py b/kcweb/Events.py index c52d4efc2b5dbd08d01d7211b12a5c8b852a80f4..1cba5fb57344ce80b8afe64190b1c19d94b8d682 100644 --- a/kcweb/Events.py +++ b/kcweb/Events.py @@ -14,7 +14,7 @@ class MyFileSystemEventHander(FileSystemEventHandler): if time.time()-eventgtimexz > 3: eventgtimexz=time.time() # print('* 更新文件:%s' % event.src_path) - # time.sleep(2) + # time.sleep(10) time.sleep(0.2) self.restart() class Events: diff --git a/kcweb/common/autoload.py b/kcweb/common/autoload.py index a015f40f0cfff3d1adde492eb1d36e360646cf3e..3a415d726c5ff4090f5ebb2f2136e6963276d442 100644 --- a/kcweb/common/autoload.py +++ b/kcweb/common/autoload.py @@ -947,7 +947,7 @@ class create: i=0 j+=1 arr=arr['data'] - r=requests.get(arr['dowurl']) + r=requests.get(arr['dowurl'],verify=False) f = open(self.appname+"/"+self.modular+"/controller/"+plug+".zip", "wb") for chunk in r.iter_content(chunk_size=512): if chunk: