From bc80f59b2685251fe0d6b122c529178dc3697156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=81=D0=B8=D0=BB=D1=8C=20=D0=A1=D0=B2=D1=96?= =?UTF-8?q?=D0=B4=D1=80=D1=96=D0=BA?= Date: Wed, 21 Jun 2023 16:52:06 +0300 Subject: [PATCH] add menu for roleid --- __pycache__/routes.cpython-310.pyc | Bin 532 -> 532 bytes components/k2adm/k2adm/views.py | 43 ++----------------------------- components/k2adm/setup.py | 4 +-- components/k2auth/k2auth/models.py | 47 +++++++++++----------------------- components/k2auth/k2auth/views.py | 3 +++ components/k2auth/setup.py | 4 +-- db/database.db | Bin 36864 -> 36864 bytes k2/__pycache__/k2rout.cpython-310.pyc | Bin 14294 -> 14250 bytes k2/k2rout.py | 4 +-- routes.py | 4 ++- 10 files changed, 29 insertions(+), 80 deletions(-) diff --git a/__pycache__/routes.cpython-310.pyc b/__pycache__/routes.cpython-310.pyc index 1e81df27e6a1e7c9df4844b8530a68e747eb80f9..2333ade9115aa18d11f7189665e929777868795a 100644 GIT binary patch delta 29 jcmbQjGKGaVpO=@50SNRMCZ}v!$jije#K*|PB*X{+Q3M2& delta 29 jcmbQjGKGaVpO=@50SL6dO-fm}ke7*_k&lswQHT)$Ud{!4 diff --git a/components/k2adm/k2adm/views.py b/components/k2adm/k2adm/views.py index 6a2630f..bd6a3b0 100644 --- a/components/k2adm/k2adm/views.py +++ b/components/k2adm/k2adm/views.py @@ -71,7 +71,8 @@ def newUser(): def changePassword(): session = k2.extensions['sqlalchemy'].db.session current_user = get_jwt_identity() - user = session.query(k2users).filter_by(user_id=current_user).first() + + user = session.query(k2users).filter_by(user_id=current_user['user_id']).first() if user.password == hashlib.md5(request.json['old_password'].encode()).hexdigest(): if request.json['new_password'] == request.json['re_new_password']: user.password = hashlib.md5(request.json['new_password'].encode()).hexdigest() @@ -101,43 +102,3 @@ def menu_items(): }] return data - - - - - -# @adm.route('/register', methods=["POST"]) -# def register(): -# params = request.json -# session = k2.extensions['sqlalchemy'].db.session -# exist = k2users.user_by_login(request.json['login']) -# if not exist: -# user = k2users(**params) -# session.add(user) -# session.commit() -# token, userData, userAbilities = user.get_token() -# return {'accessToken': token, "userData": userData, "userAbilities": userAbilities} -# else: -# return jsonify({'error': 'User exist'}), 401 - - -# @adm.route('/login', methods=["POST"]) -# def login(): -# params = request.json -# user = k2users.authenticate(**params) -# if user: -# token, userData, userAbilities = user.get_token() -# return {'accessToken': token, "userData": userData, "userAbilities": userAbilities} -# else: -# return jsonify({'error': 'Unauthorized'}), 401 - - -# @adm.route('/logout', methods=["GET"]) -# @jwt_required() -# def logout(): -# -# response = { -# 'message': 'Logged out successfully' -# } - - # return jsonify(response) diff --git a/components/k2adm/setup.py b/components/k2adm/setup.py index 9a8c037..e231f9a 100644 --- a/components/k2adm/setup.py +++ b/components/k2adm/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name='k2adm', - version='1.0.0', + version='1.0.1', description='Description of my project', author='k2 cloud', author_email='ys@corp2.eu', @@ -12,4 +12,4 @@ setup( package_data={ # Optional }, install_requires=[""], -) \ No newline at end of file +) diff --git a/components/k2auth/k2auth/models.py b/components/k2auth/k2auth/models.py index 7880dbe..7c948ac 100644 --- a/components/k2auth/k2auth/models.py +++ b/components/k2auth/k2auth/models.py @@ -1,3 +1,4 @@ + import uuid from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base @@ -30,12 +31,17 @@ class k2users(Base): def get_token(self, expire_time=24): expires_delta = timedelta(expire_time) - token = create_access_token(identity=self.user_id, expires_delta=expires_delta) + # token = create_access_token(identity=self.user_id, expires_delta=expires_delta) + token = create_access_token(identity={ + 'user_id': self.user_id, + 'user_role': self.roleid + }, expires_delta=expires_delta) db = k2.extensions['sqlalchemy'].db connection = db.engine.connect() result = connection.execute( db.text(f"SELECT rolename FROM k2roles where roleid = '{self.roleid}'")).fetchone() + rolename = result[0] if result else None userData = { @@ -48,14 +54,19 @@ class k2users(Base): } userAbilities = [] + from k2.k2comp import Component + components = Component.query.filter(Component.installed == 1).all() + components_names = [component.name for component in components] + + abilities_query = f""" SELECT menus.namemenu, - prava.r, prava.w, prava.i, prava.d, prava.c, prava.exp, prava.imp, prava.settable, prava.cutpast, + prava.r, prava.w, prava.i, prava.d, prava.c, prava.exp, prava.imp, prava.settable, prava.cutpast, prava.enable, prava.del FROM k2admin_menus menus JOIN k2admin_menus_prava prava ON menus.menuid = prava.menuid - WHERE prava.roleid = {self.roleid} + WHERE prava.roleid = {self.roleid} AND menus.namemenu IN {tuple(components_names)} """ abilities_list = connection.execute(db.text(abilities_query)).fetchall() @@ -72,7 +83,7 @@ class k2users(Base): "settable": ability[8], "cutpast": ability[9], "enable": ability[10], - "del": ability[11], + "del": ability[11] } abilities_dict_copy = abilities_dict.copy() @@ -80,34 +91,6 @@ class k2users(Base): if value == 0: del abilities_dict[key] userAbilities.append(abilities_dict) - #________________________________________________________________________________________ - - menu_query = f""" - SELECT menus.prevmenu, menus.namemenu, menus.caption, menus.url - FROM k2admin_menus menus - JOIN k2admin_menus_prava prava ON menus.menuid = prava.menuid - WHERE prava.roleid = '{self.roleid}' - """ - menus = connection.execute(db.text(menu_query)).fetchall() - - menus_dict = {} - for menu in menus: - menus_dict[menu[0]] = [] - - for key in menus_dict: - for el in menus: - if key == el[0]: - menus_dict[key].append( - { - "namemenu": el[1], - "caption": el[2], - "url": el[3] - }) - - print(menus_dict) - - - #________________________________________________________________________________________ return (token, userData, userAbilities) diff --git a/components/k2auth/k2auth/views.py b/components/k2auth/k2auth/views.py index 6b9aa61..a69ef96 100644 --- a/components/k2auth/k2auth/views.py +++ b/components/k2auth/k2auth/views.py @@ -32,11 +32,14 @@ class Auth(): session.add(user) session.commit() token, userData, userAbilities = user.get_token() + print(userAbilities) + return {'accessToken': token, "userData": userData, "userAbilities": userAbilities} except: return jsonify({'status': '400', 'message': "Missing required fields"}), 400 + def login(self): params = request.json user = k2users.authenticate(**params) diff --git a/components/k2auth/setup.py b/components/k2auth/setup.py index b3e384e..ddb836a 100644 --- a/components/k2auth/setup.py +++ b/components/k2auth/setup.py @@ -2,7 +2,7 @@ from setuptools import setup setup( name='k2auth', - version='1.0.0', + version='1.0.1', description='Description of my project', author='k2 cloud', author_email='ys@corp2.eu', @@ -12,4 +12,4 @@ setup( package_data={ # Optional }, install_requires=[""], -) \ No newline at end of file +) diff --git a/db/database.db b/db/database.db index 4b1e95354da149713d3cec02bc62da2dda4c3338..cc755d79f1809aa48c354ac885e4221e191f6b8d 100644 GIT binary patch delta 230 zcmaiuJr05}6o3QnMiVz2NR*9YUte2VCKKb}z!i*?+EI@n#0zNZ0l0!;^D3Uh-GmEp zfbXa2!lnx!QP4h@yP$oa79@7LsR5-1ZE_CaG)Jnegi1Lrq^tdlBmwvjAyX^_El_2e zB2x4}a)}w26S#g#&7fSkjwi@WjAJf?!Vi+WhWr&Jt%Z3|{sW@=KA->q delta 226 zcmZozz|^pSX@WFk(L@<%#-fc0BDxA@X^Dm=W{C!=W+{dyX=$kzhK8m_mPV!q#zsa- zsU|6tr|7CqcG8iVd{tM7&%nyi)XLOS&(P4)(9&%3SKT}X RS%uk`k&s23Z|AEj000{1K8XMT diff --git a/k2/__pycache__/k2rout.cpython-310.pyc b/k2/__pycache__/k2rout.cpython-310.pyc index d901934e6e21cb5474667617f3ca5bb301972726..0bd57636cc5f9bd2bf6984e7092b7ffb3ae521cf 100644 GIT binary patch delta 3726 zcma)8Yiv}<72a9jy=|_nc@n%0hYycZC}_Ivv)DE z)-eRAN+^oRq>56J1XDF_Xr)#%sS31-kV2{YQlmx?0Qh)SES|#Z@=epjF z`%o?U+nMj2Gc)HgXYQ|4H&fn}*IVjv;ppK-x*t#=Mj-1bC1PyY%Mk8gE);yqUKU(@jihk--wJ zJiNR_53y~a*UmN4>m{ZGm`>hB%sOJaf$8DB#H^={*R33PJ?|sFZ-G?%L3Mx+64g(t zLo2Eq_(tLfh~KorZ{}NwAEXtAVTG;y31Wtb*#^vZK0?d}Vs-#C%EyS=NUM$Wt^W$( zlYA!$Hj(O6p!zg_hM3KK7vBvb-$If-Alb|Jkz`ojasIN&X;n_^X7t3Y88x_`G!654 zs|;sCKb19v&X?XOy1}X&AoU`M(1=iv5ReltjWsR3;PNp~%Ze-@uc=>VA*mIIJfuvb zfIL*($NJ^v;*XeLUUcuYWuy?058XX%M5-lw!bIdD0Lxm+Oe!{t^z+EK9XJLpXA>?iG_@I2n`!XAr4dr!@eGYY* zm{?I;*4S6R3Bq!zyuBVpmOCCxPG@7&y5_aqmQAuze(3ity}0HPQ^^H9O+(*t)S6r|!ZQi7q%|mb)4*Lreg4h;v3qQG;@*ifGmwx82Eh>mv_x~BQ-@!U!Mh?}!1fjZD z+f>#J#GKMIZI~h@|5AIXHh~(a5LTjShbkkF)&1en{|uGLqTOi(43#(oU{#8kk(Q);3n5=?2>CAoZ@DICvdNQ? z;yEJ?J#k8eFVj})t1^1!qmF90A%Uj;ST_|FT&|};x&7|Xo88?!8Myw=5bBV8m zUc_5?Z!-dYDY%SuR{IV~cgs`k=F+n*ai*qFs~K)ym3$cL+JXw2({g1@VWdTxX4K~_ z1$Tu;M&8@&ps5BBWiaTFPqcQkP8n~VTA+-zq8K}+eNt>0mdaC!n31$yDnXaX7prtu zKtpQ3#z&(93*5#8T+`(?i zH^R3(-$DtwosfsyrViu}i|*3VL=H#)=^!rqAQXgrMNp^<16m(!}|F20M(3V>EraD&>BEp&Nz=Q?&r&UgNz zl5&o#FZWydTvtM)DAOCZT8xVHp3p{Hry}L~qUOe=S-2${-jze$ZS3yS zQTTf6-j58OiMkg(9R){3DVFO8Sgr?TS8qpC2&P)uYTxaHp!yLx+uLSm56^CS>?Q`C z3p)EzG%}?OB4dtI^*Kch=SXwdk#hiFgglP8i>n5F z(Suf%>CV9y`2mMkyjOf1_Wt9i@F(7bk?46J&?=sRyKE$<=gLO*?>`U>2ltQc96z9y z{99;cYJKzI5j5O_Ky{@?Jobl+9h@i#A{7|LC^Usc2JSVqqjve*^>vM_(zyt#k1$Ng zD~hb|Yha6VbKgJMeL2)WP$zy2JbY29xEg%S)WB3=vlX54V*dzRkPrHsI?p0;4q+|A zPXRQyxR2ux5PpP!*%sTSZ=k(u)gkVI7z_^Md@dNqQfg9=%arnO6G1zsGh7WQ6 z9s*ix%wF%aD_Ny^r`I~ct4dIHx>V+Nx|#D6mjAa2erEgtrlHBHTiF7hpi##^D`=y9f^u77^|tpf3eifWi@wV;eTI PN;$t_!d2yNEoc7(x(ayH delta 3776 zcmbVOdu&tJ8Tawy+KJ_E)8Cg6;dh8`*BO z?T>|=fMn)C0> zC%@*}Yw}3IFYmb`Y=^8VIT$2D0sLUruurCw>S0)AtN<>X*ezcuc~#koN7l&R(r>Uf z`IFL?`WhsR0vPseMir*3t0y?!5w>3rxlge@@+RCG5J-*nX|%PT`m zn3{h1dPQ+z3x1oB%NFDfMYxIA9sJ3l+(y5Ml_E2xOk)$}c}t8Dvu{xyrvW zg*-Y*;?$ z+uMwR8s*a>J*AH6vGH_*LkAWGF7NsF5BH*weJssY!w%I^sb8X=lzO&MBZH~M8A6R} z`2%mYe75=oyS(!I>N?y1k*bft4y0;d-DODC2X%q601(dGBNLh~Qm@n>uS=l7G(tX! zW~PJ`^?y44KQkqC)XO4Zro>qQqe8^Bj0%|$v5X$qvyd(%mub+G5N%3_eiYBh?>2O@ zS^2w$ntp2R9O};@TtILk%p(+)4!0SE1=-PfH1ZrQ!(Ow~E+V-o>#&Ww<6>-5n^j|3 zkq|R-xv{PKi$FIVW0Tp`nW*!;HXRe{xM-DsYz#JGiNqHWwj(@`P~5N~|Lg3U{Fxty z;!3)yjJbn(2#|Vmrt%f6`3k`ahb~MopJDv?Ai?U%_L$welE5X1hBBS)IfOasWqly-az5se*#SEtvtx;jj z!jVGMlbz;q9mbof-)Mn(D6XTZUnYXP*owRnyy<=m2^48UraH!t6nw-e$s_R$uKv^c z4)c79z0eqx=i=;kga+A7c`{_c3?B|Jtj$BAy7YC-!fA$*nat{1!cas~7phw5cF2{Q zP~jU{K&P%EP=l|gf*PFsxrD6GAryLawc49Hx3RZnw)4vIL&$#onNtE-8uxx!BBiv6&y2+j}|#*lyvnwJ9q2dqO_n(@_Y~aGUcDh8oQLlc?-6?9iHV zN}y3PE!5dqQcYzArqL)##gi)S;c|^n>u^h%-2BzOCP2d-=RBsTN$M5`I$*KLp57t$ zz8voj%)7v<1O9izf9C4|y5*u}&Z4s%yoQ-2XW^{YGRGz?b5`BDXw&Uej;j`Ky=Glv zb2eRBbmri3K4;I_7F|o0QOn8DoC9Q)oP*nHaqpRP=A7JKYsuMXEn*<2ESBV)OJI4X zBd3VHqd5}YYROrF;XnqixPvPi7zVK>y)e4E8Y8g9SufUn|RggY{_ zvA)4As&KOnAwTR^yG1^^v1R@Qatb};f&^xTfQuxCMx#!&3eS|N+kE<%X*~r>(RG;r z7z~?a2Id8H7nUMgS$HB%Y6%XOqE;=rCjDX&L_fr|m*H$vtS;tab|(M4v5_sxlD>bk zyVB7=P=D`V@COez1&@NaQVj@;079oc+P{-skYDW&bkSwDfYgT&ehLtFiMzP|A;OOk zu!+RO@(=x?szzKA_;K|fz+a_*V2^?;@qMWcyr#T^%R91iaKkZL{s#B&BA{ZJnf5+u z$tW#k#0&50Oa+Kq9SUtDGI@B@QHRgfUe5jvmB4^^ diff --git a/k2/k2rout.py b/k2/k2rout.py index f085ae6..6fa5a52 100644 --- a/k2/k2rout.py +++ b/k2/k2rout.py @@ -15,7 +15,7 @@ import os import sys from .k2admmenu import K2admin_menus, K2admin_Menus_Prava from sqlalchemy import text -from flask_jwt_extended import get_jwt_identity +from flask_jwt_extended import get_jwt_identity, jwt_required @@ -472,7 +472,6 @@ def add_to_menu(): @components_bp.route('/api/main-menu/') def get_admin_menu(): current_user = get_jwt_identity() - print(current_user) role_id = current_user['user_role'] filter_menu = [] response = requests.get(f"{k2.domain}api/add-to-menu") @@ -481,6 +480,7 @@ def get_admin_menu(): for item in response.json(): filtered_children = [] for im in item['children']: + if im['to'] in menu_items_list: filtered_children.append(im) if filtered_children: diff --git a/routes.py b/routes.py index a3ac1c1..744d4a8 100644 --- a/routes.py +++ b/routes.py @@ -4,7 +4,9 @@ from k2.k2rout import components_bp app.register_blueprint(components_bp) from components.k2test.k2test.views import k2test app.register_blueprint(k2test, url_prefix='/k2test') + from components.k2auth.k2auth.views import k2auth app.register_blueprint(k2auth, url_prefix='/k2auth') + from components.k2adm.k2adm.views import k2adm -app.register_blueprint(k2adm, url_prefix='/k2adm') \ No newline at end of file +app.register_blueprint(k2adm, url_prefix='/k2adm') -- 1.9.1