Commit 0966a93c9fc9e6066557a3965d61fcfa2af0dd45
1 parent
2cd26db164
add k2adm
Showing 17 changed files with 338 additions and 7 deletions Inline Diff
- .gitignore
- __pycache__/main.cpython-310.pyc
- __pycache__/routes.cpython-310.pyc
- components/k2adm/__pycache__/__init__.cpython-310.pyc
- components/k2adm/k2adm/README.md
- components/k2adm/k2adm/__pycache__/__init__.cpython-310.pyc
- components/k2adm/k2adm/__pycache__/models.cpython-310.pyc
- components/k2adm/k2adm/__pycache__/views.cpython-310.pyc
- components/k2adm/k2adm/models.py
- components/k2adm/k2adm/requirements.txt
- components/k2adm/k2adm/setup.py
- components/k2adm/k2adm/views.py
- components/k2auth/k2auth/views.py
- db/first-login.yml
- languages/babel_translation_directories.yml
- routes.py
- yml/users.yml
.gitignore
| 1 | /components/adm/ | 1 | /components/vue2/ |
| 2 | /components/grid/ | 2 | /components/grid/ |
| 3 | /components/vue/ | 3 | /components/vue/ |
| 4 | 4 |
__pycache__/main.cpython-310.pyc
No preview for this file type
__pycache__/routes.cpython-310.pyc
No preview for this file type
components/k2adm/__pycache__/__init__.cpython-310.pyc
No preview for this file type
components/k2adm/k2adm/README.md
| File was created | 1 | # main.py | |
| 2 | |||
| 3 | from components.adm.adm.views import adm | ||
| 4 | from components.test.test.views import test | ||
| 5 | |||
| 6 | app.register_blueprint(adm, url_prefix='/adm') | ||
| 7 | |||
| 8 | cd components/adm | ||
| 9 | pip install -r requirements.txt | ||
| 10 | |||
| 11 | |||
| 12 | endpoint "http://127.0.0.1:5000/adm/register" | ||
| 13 | dictionary to register in such way | ||
| 14 | { | ||
| 15 | "login": "xxx", | ||
| 16 | "password": "xxx", | ||
| 17 | "name": "xxx", | ||
| 18 | "email": "xxx" | ||
| 19 | } | ||
| 20 | |||
| 21 | |||
| 22 | endpoint "http://127.0.0.1:5000/adm/login" | ||
| 23 | dictionary to login in such way | ||
| 24 | { | ||
| 25 | "login":"xxx", | ||
| 26 | "password":"xxx" | ||
| 27 | } | ||
| 28 | |||
| 29 | endpoint http://127.0.0.1:5000/adm/changePassword | ||
| 30 | dictionary to changePassword in such way | ||
| 31 | { | ||
| 32 | "old_password":"xxx", | ||
| 33 | "new_password": "xxx", | ||
| 34 | "re_new_password": "xxx" | ||
| 35 | } | ||
| 36 | endpoint http://127.0.0.1:5000/adm/newUser | ||
| 37 | { | ||
| 38 | "login": "xxx", | ||
| 39 | "password": "xxx", | ||
| 40 | "name": "xxx", | ||
| 41 | "email": "xxx", | ||
| 42 | "phone": "xxx", | ||
| 43 | "repassword": "xxx" | ||
| 44 | |||
| 45 | } |
components/k2adm/k2adm/__pycache__/__init__.cpython-310.pyc
No preview for this file type
components/k2adm/k2adm/__pycache__/models.cpython-310.pyc
No preview for this file type
components/k2adm/k2adm/__pycache__/views.cpython-310.pyc
No preview for this file type
components/k2adm/k2adm/models.py
| File was created | 1 | import uuid | |
| 2 | from sqlalchemy import Column, Integer, String | ||
| 3 | from sqlalchemy.ext.declarative import declarative_base | ||
| 4 | from flask_jwt_extended import create_access_token, decode_token | ||
| 5 | from datetime import timedelta | ||
| 6 | import hashlib | ||
| 7 | from flask import current_app as k2 | ||
| 8 | |||
| 9 | |||
| 10 | Base = declarative_base() | ||
| 11 | |||
| 12 | class k2users(Base): | ||
| 13 | __tablename__ = 'k2users' | ||
| 14 | user_id = Column(Integer, primary_key=True) | ||
| 15 | login = Column(String(50), unique=True) | ||
| 16 | name = Column(String(50)) | ||
| 17 | email = Column(String(150)) | ||
| 18 | password = Column(String(50)) | ||
| 19 | phone = Column(String(20)) | ||
| 20 | firstname = Column(String(50)) | ||
| 21 | roleid = Column(String(50)) | ||
| 22 | |||
| 23 | def __init__(self, **kwargs): | ||
| 24 | self.user_id = hashlib.md5(str(uuid.uuid4()).encode()).hexdigest() | ||
| 25 | self.login = kwargs.get('login') | ||
| 26 | self.password = hashlib.md5(kwargs.get('password').encode()).hexdigest() | ||
| 27 | self.name = kwargs.get('name') | ||
| 28 | self.email = kwargs.get('email') | ||
| 29 | self.phone = kwargs.get('phone') | ||
| 30 | self.firstname = kwargs.get('firstname') | ||
| 31 | self.roleid = kwargs.get('roleid') | ||
| 32 | |||
| 33 | |||
| 34 | def get_token(self, expire_time=24): | ||
| 35 | expires_delta = timedelta(expire_time) | ||
| 36 | token = create_access_token(identity=self.user_id, expires_delta=expires_delta) | ||
| 37 | if self.roleid == '1': | ||
| 38 | role = 'admin' | ||
| 39 | else: | ||
| 40 | role = "client" | ||
| 41 | |||
| 42 | userData = { | ||
| 43 | "avatar": "/src/assets/images/avatars/avatar-4.png", | ||
| 44 | "email": self.email, | ||
| 45 | "fullName": self.name, | ||
| 46 | "id": self.user_id, | ||
| 47 | "role": role, | ||
| 48 | "username": self.login | ||
| 49 | |||
| 50 | } | ||
| 51 | if self.roleid != '1': | ||
| 52 | userAbilities = [ | ||
| 53 | { | ||
| 54 | "action": "read", | ||
| 55 | "subject": "Auth"}, | ||
| 56 | |||
| 57 | { | ||
| 58 | "action": "read", | ||
| 59 | "subject": "AclDemo"} | ||
| 60 | ] | ||
| 61 | else: | ||
| 62 | userAbilities = [ | ||
| 63 | { | ||
| 64 | "action": "manage", | ||
| 65 | "subject": "all" | ||
| 66 | } | ||
| 67 | ] | ||
| 68 | return (token, userData,userAbilities) | ||
| 69 | |||
| 70 | @classmethod | ||
| 71 | def authenticate(cls, login, password): | ||
| 72 | session = k2.extensions['sqlalchemy'].db.session | ||
| 73 | user = '' | ||
| 74 | try: | ||
| 75 | user = session.query(cls).filter(cls.login == login).filter(cls.password == hashlib.md5(password.encode()).hexdigest()).one() | ||
| 76 | except: | ||
| 77 | user = None | ||
| 78 | return user | ||
| 79 | |||
| 80 | @classmethod | ||
| 81 | def user_by_login(cls, login): | ||
| 82 | session = k2.extensions['sqlalchemy'].db.session | ||
| 83 | user = session.query(cls).filter(cls.login == login).first() | ||
| 84 | return user | ||
| 85 | |||
| 86 | |||
| 87 | |||
| 88 | |||
| 89 | |||
| 90 |
components/k2adm/k2adm/requirements.txt
| File was created | 1 | alembic==1.11.1 | |
| 2 | Babel==2.12.1 | ||
| 3 | bcrypt==4.0.1 | ||
| 4 | bidict==0.22.1 | ||
| 5 | blinker==1.6.2 | ||
| 6 | certifi==2023.5.7 | ||
| 7 | charset-normalizer==3.1.0 | ||
| 8 | click==8.1.3 | ||
| 9 | colorama==0.4.6 | ||
| 10 | dnspython==2.3.0 | ||
| 11 | email-validator==2.0.0.post2 | ||
| 12 | Flask==2.3.2 | ||
| 13 | flask-babel==3.1.0 | ||
| 14 | Flask-Bcrypt==1.0.1 | ||
| 15 | Flask-Cors==3.0.10 | ||
| 16 | Flask-JWT-Extended==4.5.2 | ||
| 17 | Flask-Login==0.6.2 | ||
| 18 | Flask-Migrate==4.0.4 | ||
| 19 | Flask-MySQLdb==1.0.1 | ||
| 20 | Flask-SQLAlchemy==3.0.3 | ||
| 21 | flask-staticdirs==1.0.1 | ||
| 22 | Flask-WTF==1.1.1 | ||
| 23 | greenlet==2.0.2 | ||
| 24 | idna==3.4 | ||
| 25 | itsdangerous==2.1.2 | ||
| 26 | Jinja2==3.1.2 | ||
| 27 | jsonify==0.5 | ||
| 28 | Mako==1.2.4 | ||
| 29 | MarkupSafe==2.1.2 | ||
| 30 | mysql==0.0.3 | ||
| 31 | mysql-connector==2.2.9 | ||
| 32 | mysql-connector-python==8.0.33 | ||
| 33 | mysqlclient==2.1.1 | ||
| 34 | peppercorn==0.6 | ||
| 35 | protobuf==3.20.3 | ||
| 36 | PyJWT==2.7.0 | ||
| 37 | python-engineio==4.4.1 | ||
| 38 | python-socketio==5.8.0 | ||
| 39 | pytz==2023.3 | ||
| 40 | PyYAML==6.0 | ||
| 41 | requests==2.31.0 | ||
| 42 | six==1.16.0 | ||
| 43 | SQLAlchemy==2.0.15 | ||
| 44 | typing_extensions==4.6.2 | ||
| 45 | urllib3==2.0.2 | ||
| 46 | Werkzeug==2.3.4 | ||
| 47 | WTForms==3.0.1 |
components/k2adm/k2adm/setup.py
| File was created | 1 | from setuptools import setup | |
| 2 | |||
| 3 | setup( | ||
| 4 | name='adm', | ||
| 5 | version='1.0.0', | ||
| 6 | description='Description of my project', | ||
| 7 | author='Your Name', | ||
| 8 | author_email='yourname@example.com', | ||
| 9 | keywords="adm, k2", | ||
| 10 | python_requires=">=3.7, <=3.11.2", | ||
| 11 | packages=['adm'], | ||
| 12 | package_data={ # Optional | ||
| 13 | }, | ||
| 14 | install_requires=[""], | ||
| 15 | ) |
components/k2adm/k2adm/views.py
| File was created | 1 | import hashlib | |
| 2 | import uuid | ||
| 3 | from flask import Blueprint, request, jsonify | ||
| 4 | from flask import current_app as k2 | ||
| 5 | from flask_jwt_extended import jwt_required, get_jwt_identity | ||
| 6 | |||
| 7 | |||
| 8 | from .models import k2users | ||
| 9 | |||
| 10 | |||
| 11 | k2adm = Blueprint('adm', __name__, template_folder='templates', static_folder='static', static_url_path='/adm') | ||
| 12 | |||
| 13 | |||
| 14 | @k2adm.route('/usersclients', methods=["GET"]) | ||
| 15 | @jwt_required() | ||
| 16 | def users_clients(): | ||
| 17 | return jsonify({"data": "roles"}) | ||
| 18 | |||
| 19 | |||
| 20 | @k2adm.route('/users', methods=["GET"]) | ||
| 21 | @jwt_required() | ||
| 22 | def grid_users(): | ||
| 23 | return jsonify({"data": "users"}) | ||
| 24 | |||
| 25 | |||
| 26 | @k2adm.route('/roles', methods=["GET"]) | ||
| 27 | @jwt_required() | ||
| 28 | def grid_roles(): | ||
| 29 | return jsonify({"data": "roles"}) | ||
| 30 | |||
| 31 | |||
| 32 | |||
| 33 | # @adm.route('/register', methods=["POST"]) | ||
| 34 | # def register(): | ||
| 35 | # params = request.json | ||
| 36 | # session = k2.extensions['sqlalchemy'].db.session | ||
| 37 | # exist = k2users.user_by_login(request.json['login']) | ||
| 38 | # if not exist: | ||
| 39 | # user = k2users(**params) | ||
| 40 | # session.add(user) | ||
| 41 | # session.commit() | ||
| 42 | # token, userData, userAbilities = user.get_token() | ||
| 43 | # return {'accessToken': token, "userData": userData, "userAbilities": userAbilities} | ||
| 44 | # else: | ||
| 45 | # return jsonify({'error': 'User exist'}), 401 | ||
| 46 | |||
| 47 | |||
| 48 | # @adm.route('/login', methods=["POST"]) | ||
| 49 | # def login(): | ||
| 50 | # params = request.json | ||
| 51 | # user = k2users.authenticate(**params) | ||
| 52 | # if user: | ||
| 53 | # token, userData, userAbilities = user.get_token() | ||
| 54 | # return {'accessToken': token, "userData": userData, "userAbilities": userAbilities} | ||
| 55 | # else: | ||
| 56 | # return jsonify({'error': 'Unauthorized'}), 401 | ||
| 57 | |||
| 58 | |||
| 59 | # @adm.route('/logout', methods=["GET"]) | ||
| 60 | # @jwt_required() | ||
| 61 | # def logout(): | ||
| 62 | # | ||
| 63 | # response = { | ||
| 64 | # 'message': 'Logged out successfully' | ||
| 65 | # } | ||
| 66 | |||
| 67 | # return jsonify(response) | ||
| 68 | |||
| 69 | |||
| 70 | @k2adm.route('/api_get_roles', methods=["GET"]) | ||
| 71 | @jwt_required() | ||
| 72 | def roles(): | ||
| 73 | db = k2.extensions['sqlalchemy'].db | ||
| 74 | connection = db.engine.connect() | ||
| 75 | query = db.text("SELECT roleid, rolename FROM k2roles") | ||
| 76 | result = connection.execute(query).fetchall() | ||
| 77 | roles = [dict(id=res.roleid, role=res.rolename) for res in result] | ||
| 78 | return {'roles': roles} | ||
| 79 | |||
| 80 | |||
| 81 | @k2adm.route('/newUser', methods=["GET", "POST"]) | ||
| 82 | @jwt_required() | ||
| 83 | def newUser(): | ||
| 84 | session = k2.extensions['sqlalchemy'].db.session | ||
| 85 | exist = k2users.user_by_login(request.json['login']) | ||
| 86 | if not exist: | ||
| 87 | res = k2users( | ||
| 88 | user_id=hashlib.md5(str(uuid.uuid4()).encode()).hexdigest(), | ||
| 89 | login=request.json['login'], | ||
| 90 | name=request.json['name'], | ||
| 91 | email=request.json['email'], | ||
| 92 | password=hashlib.md5(request.json['password'].encode()).hexdigest(), | ||
| 93 | phone=request.json['phone']) | ||
| 94 | if res: | ||
| 95 | session.add(res) | ||
| 96 | session.commit() | ||
| 97 | return jsonify({'status': 'ok'}) | ||
| 98 | else: | ||
| 99 | return jsonify({'error': 'Such user exist'}), 404 | ||
| 100 | |||
| 101 | |||
| 102 | @k2adm.route('/changePassword', methods=["POST"]) | ||
| 103 | @jwt_required() | ||
| 104 | def changePassword(): | ||
| 105 | session = k2.extensions['sqlalchemy'].db.session | ||
| 106 | current_user = get_jwt_identity() | ||
| 107 | user = session.query(k2users).filter_by(user_id=current_user).first() | ||
| 108 | if user.password == hashlib.md5(request.json['old_password'].encode()).hexdigest(): | ||
| 109 | if request.json['new_password'] == request.json['re_new_password']: | ||
| 110 | user.password = hashlib.md5(request.json['new_password'].encode()).hexdigest() | ||
| 111 | session.commit() | ||
| 112 | else: | ||
| 113 | return jsonify({'error': 'Пароль не найден в базе'}), 404 | ||
| 114 | else: | ||
| 115 | return jsonify({'error': 'Пароль не совпвдает'}), 404 | ||
| 116 | return jsonify({'status': 'ok'}) | ||
| 117 | |||
| 118 | |||
| 119 | @k2adm.route('/menu-items') | ||
| 120 | def menu_items(): | ||
| 121 | menu = [ | ||
| 122 | { | ||
| 123 | "title": 'Site administration', | ||
| 124 | "icon": {"icon": 'mdi-account-circle-outline'}, | ||
| 125 | "children": [ | ||
| 126 | {'title': 'Password change', 'to': 'adm-changePassword'}, | ||
| 127 | {'title': 'New user', 'to': 'adm-newUser'}, | ||
| 128 | {'title': 'Users', 'to': 'adm-users'}, | ||
| 129 | {'title': 'Users are clients', 'to': 'adm-usersclients'}, | ||
| 130 | {'title': 'Roles', 'to': 'adm-roles'}, | ||
| 131 | {'title': 'Access to the menu', 'to': 'adm-menuaaccess'}, | ||
| 132 | ], | ||
| 133 | }] | ||
| 134 | |||
| 135 | return menu |
components/k2auth/k2auth/views.py
| 1 | # import hashlib | 1 | # import hashlib |
| 2 | # import uuid | 2 | # import uuid |
| 3 | from flask import Blueprint, request, jsonify | 3 | from flask import Blueprint, request, jsonify |
| 4 | from flask import current_app as k2 | 4 | from flask import current_app as k2 |
| 5 | from flask_jwt_extended import jwt_required | 5 | from flask_jwt_extended import jwt_required |
| 6 | 6 | ||
| 7 | from .models import k2users | 7 | from .models import k2users |
| 8 | 8 | ||
| 9 | k2auth = Blueprint('k2auth', __name__, template_folder='templates', static_folder='static', static_url_path='/adm') | 9 | k2auth = Blueprint('k2auth', __name__, template_folder='templates', static_folder='static', static_url_path='/vue2') |
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | class Auth(): | 12 | class Auth(): |
| 13 | def __init__(self): | 13 | def __init__(self): |
| 14 | pass | 14 | pass |
| 15 | 15 | ||
| 16 | def register(self): | 16 | def register(self): |
| 17 | params = request.json | 17 | params = request.json |
| 18 | session = k2.extensions['sqlalchemy'].db.session | 18 | session = k2.extensions['sqlalchemy'].db.session |
| 19 | try: | 19 | try: |
| 20 | user = k2users(**params) | 20 | user = k2users(**params) |
| 21 | session.add(user) | 21 | session.add(user) |
| 22 | session.commit() | 22 | session.commit() |
| 23 | token = user.get_token() | 23 | token = user.get_token() |
| 24 | 24 | ||
| 25 | return {'access_token': token} | 25 | return {'access_token': token} |
| 26 | except: | 26 | except: |
| 27 | return jsonify({'error': 'Unauthorized'}), 401 | 27 | return jsonify({'error': 'Unauthorized'}), 401 |
| 28 | 28 | ||
| 29 | 29 | ||
| 30 | def login(self): | 30 | def login(self): |
| 31 | params = request.json | 31 | params = request.json |
| 32 | user = k2users.authenticate(**params) | 32 | user = k2users.authenticate(**params) |
| 33 | if user: | 33 | if user: |
| 34 | token, userData, userAbilities = user.get_token() | 34 | token, userData, userAbilities = user.get_token() |
| 35 | return {'accessToken': token, "userData": userData, "userAbilities": userAbilities} | 35 | return {'accessToken': token, "userData": userData, "userAbilities": userAbilities} |
| 36 | else: | 36 | else: |
| 37 | k2.logger.error(('%s failed to log in ', params.get('login'), params.get('password'))) | 37 | k2.logger.error(('%s failed to log in ', params.get('login'), params.get('password'))) |
| 38 | return jsonify({'error': 'Unauthorized'}), 401 | 38 | return jsonify({'error': 'Unauthorized'}), 401 |
| 39 | 39 | ||
| 40 | 40 | ||
| 41 | @jwt_required() | 41 | @jwt_required() |
| 42 | def logout(self): | 42 | def logout(self): |
| 43 | response = { | 43 | response = { |
| 44 | 'message': 'Logged out successfully' | 44 | 'message': 'Logged out successfully' |
| 45 | } | 45 | } |
| 46 | return jsonify(response) | 46 | return jsonify(response) |
| 47 | 47 | ||
| 48 | 48 | ||
| 49 | 49 | ||
| 50 | auth = Auth() | 50 | auth = Auth() |
| 51 | k2auth.add_url_rule('/login', methods=['POST'], view_func=auth.login) | 51 | k2auth.add_url_rule('/login', methods=['POST'], view_func=auth.login) |
| 52 | k2auth.add_url_rule('/logout', methods=['GET'], view_func=auth.logout) | 52 | k2auth.add_url_rule('/logout', methods=['GET'], view_func=auth.logout) |
| 53 | k2auth.add_url_rule('/register', methods=['POST'], view_func=auth.register) | 53 | k2auth.add_url_rule('/register', methods=['POST'], view_func=auth.register) |
| 54 | 54 |
db/first-login.yml
| 1 | users: | 1 | users: |
| 2 | - username: adm | 2 | - username: vue2 |
| 3 | password: k2cloud123456 | 3 | password: k2cloud123456 |
languages/babel_translation_directories.yml
| 1 | babel_translation_directories: languages;components/k2test/k2test/languages;components/grid/grid/languages;components/adm/adm/languages | 1 | babel_translation_directories: languages;components/k2test/k2test/languages;components/grid/grid/languages;components/vue2/vue2/languages |
| 2 | 2 |
routes.py
| 1 | #app = Flask(__name__) | 1 | #app = Flask(__name__) |
| 2 | from main import app | 2 | from main import app |
| 3 | from k2.k2rout import components_bp | 3 | from k2.k2rout import components_bp |
| 4 | app.register_blueprint(components_bp) | 4 | app.register_blueprint(components_bp) |
| 5 | from components.k2test.k2test.views import k2test | 5 | from components.k2test.k2test.views import k2test |
| 6 | app.register_blueprint(k2test, url_prefix='/k2test') | 6 | app.register_blueprint(k2test, url_prefix='/k2test') |
| 7 | 7 | ||
| 8 | # from components.grid.grid.views import grid | 8 | # from components.grid.grid.views import grid |
| 9 | # app.register_blueprint(grid, url_prefix='/grid') | 9 | # app.register_blueprint(grid, url_prefix='/grid') |
| 10 | # from components.vue.vue.views import vue2 | 10 | # from components.vue.vue.views import vue2 |
| 11 | # app.register_blueprint(vue2, url_prefix='/') | 11 | # app.register_blueprint(vue2, url_prefix='/') |
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | from components.k2auth.k2auth.views import k2auth | 14 | from components.k2auth.k2auth.views import k2auth |
| 15 | app.register_blueprint(k2auth, url_prefix='/k2auth') | 15 | app.register_blueprint(k2auth, url_prefix='/k2auth') |
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | from components.adm.adm.views import adm | 18 | from components.k2adm.k2adm.views import k2adm |
| 19 | app.register_blueprint(adm, url_prefix='/adm') | 19 | app.register_blueprint(k2adm, url_prefix='/adm') |
yml/users.yml
| 1 | select: | 1 | select: |
| 2 | select u.user_id, u.name, u.login, u.password, u.email, u.phone, u.photo, u.firstname, u.middlename, | 2 | select u.user_id, u.name, u.login, u.password, u.email, u.phone, u.photo, u.firstname, u.middlename, |
| 3 | u.lastname, u.roleid, u.create_datetime, u.who_create, u.firmid, u.partner_transid, u.departmentid, u.tab_number, u.name_rod, u.posada_rod, | 3 | u.lastname, u.roleid, u.create_datetime, u.who_create, u.firmid, u.partner_transid, u.departmentid, u.tab_number, u.name_rod, u.posada_rod, |
| 4 | u.all_obl, u.order_ins, u.prover, u.active, u.birth_date, f.name_firm, f.edrpou, r.rolename, r.classrole, d.department_name, u.passwd_decode | 4 | u.all_obl, u.order_ins, u.prover, u.active, u.birth_date, f.name_firm, f.edrpou, r.rolename, r.classrole, d.department_name, u.passwd_decode |
| 5 | from k2users u | 5 | from k2users u |
| 6 | 6 | ||
| 7 | left join k2firms f | 7 | left join k2firms f |
| 8 | on u.firmid=f.firmid | 8 | on u.firmid=f.firmid |
| 9 | 9 | ||
| 10 | left join k2roles r | 10 | left join k2roles r |
| 11 | on u.roleid=r.roleid | 11 | on u.roleid=r.roleid |
| 12 | 12 | ||
| 13 | left join k2department d | 13 | left join k2department d |
| 14 | on u.departmentid=d.departmentid | 14 | on u.departmentid=d.departmentid |
| 15 | 15 | ||
| 16 | table: k2users | 16 | table: k2users |
| 17 | typeid: 1 | 17 | typeid: 1 |
| 18 | rows: 20 | 18 | rows: 20 |
| 19 | sortname: create_datetime | 19 | sortname: create_datetime |
| 20 | sortorder: desc | 20 | sortorder: desc |
| 21 | detile: k2users_obl | 21 | detile: k2users_obl |
| 22 | caption: <%lnUsers%> | 22 | caption: <%lnUsers%> |
| 23 | readonly_form: | 23 | readonly_form: |
| 24 | who_create: | 24 | who_create: |
| 25 | height: 550 | 25 | height: 550 |
| 26 | form_height: 325 | 26 | form_height: 325 |
| 27 | custom_form: true | 27 | custom_form: true |
| 28 | 28 | ||
| 29 | fields: | 29 | fields: |
| 30 | user_id: | 30 | user_id: |
| 31 | field: user_id | 31 | field: user_id |
| 32 | caption: ID | 32 | caption: ID |
| 33 | width: 40 | 33 | width: 40 |
| 34 | readonly: true | 34 | readonly: true |
| 35 | align: left | 35 | align: left |
| 36 | hidden: true | 36 | hidden: true |
| 37 | 37 | ||
| 38 | order_ins: | 38 | order_ins: |
| 39 | field: order_ins | 39 | field: order_ins |
| 40 | caption: № | 40 | caption: № |
| 41 | width: 40 | 41 | width: 40 |
| 42 | readonly: true | 42 | readonly: true |
| 43 | align: left | 43 | align: left |
| 44 | hidden: true | 44 | hidden: true |
| 45 | 45 | ||
| 46 | 46 | ||
| 47 | 47 | ||
| 48 | login: | 48 | login: |
| 49 | field: login | 49 | field: login |
| 50 | caption: Email | 50 | caption: Email |
| 51 | width: 100 | 51 | width: 100 |
| 52 | width_form: 250 | 52 | width_form: 250 |
| 53 | readonly: false | 53 | readonly: false |
| 54 | align: left | 54 | align: left |
| 55 | 55 | ||
| 56 | act: | 56 | act: |
| 57 | field: " " | 57 | field: " " |
| 58 | alias: u.active | 58 | alias: u.active |
| 59 | caption: Акт. | 59 | caption: Акт. |
| 60 | width: 95 | 60 | width: 95 |
| 61 | readonly: true | 61 | readonly: true |
| 62 | align: center | 62 | align: center |
| 63 | type_field: condition | 63 | type_field: condition |
| 64 | cond: | 64 | cond: |
| 65 | exp: ($row["active"]==0) | 65 | exp: ($row["active"]==0) |
| 66 | url1: "" | 66 | url1: "" |
| 67 | target1: _self | 67 | target1: _self |
| 68 | target2: _self | 68 | target2: _self |
| 69 | caption1: <button style="color:red" onclick="doAkt('{user_id}')">Активувати</button> | 69 | caption1: <button style="color:red" onclick="doAkt('{user_id}')">Активувати</button> |
| 70 | url2: "" | 70 | url2: "" |
| 71 | caption2: <button onclick="doAkt('{user_id}')">Вимкнути</button> | 71 | caption2: <button onclick="doAkt('{user_id}')">Вимкнути</button> |
| 72 | 72 | ||
| 73 | 2: | 73 | 2: |
| 74 | field: " " | 74 | field: " " |
| 75 | caption: Зміна пароля | 75 | caption: Зміна пароля |
| 76 | width: 110 | 76 | width: 110 |
| 77 | readonly: true | 77 | readonly: true |
| 78 | align: center | 78 | align: center |
| 79 | type_field: condition | 79 | type_field: condition |
| 80 | cond: | 80 | cond: |
| 81 | exp: (false) | 81 | exp: (false) |
| 82 | url2: "/?adm=k2adminfunc_changepassword&userid={login}&mode=admin" | 82 | url2: "/?vue2=k2adminfunc_changepassword&userid={login}&mode=admin" |
| 83 | caption2: "Змінити" | 83 | caption2: "Змінити" |
| 84 | 84 | ||
| 85 | 85 | ||
| 86 | name: | 86 | name: |
| 87 | field: name | 87 | field: name |
| 88 | caption: Ім'я | 88 | caption: Ім'я |
| 89 | width: 250 | 89 | width: 250 |
| 90 | readonly: false | 90 | readonly: false |
| 91 | align: left | 91 | align: left |
| 92 | 92 | ||
| 93 | birth_date: | 93 | birth_date: |
| 94 | field: birth_date | 94 | field: birth_date |
| 95 | caption: Дата<br>народження | 95 | caption: Дата<br>народження |
| 96 | width: 100 | 96 | width: 100 |
| 97 | width_form: 250 | 97 | width_form: 250 |
| 98 | readonly: false | 98 | readonly: false |
| 99 | align: left | 99 | align: left |
| 100 | type_field: date | 100 | type_field: date |
| 101 | 101 | ||
| 102 | email: | 102 | email: |
| 103 | field: email | 103 | field: email |
| 104 | alias: u.email | 104 | alias: u.email |
| 105 | caption: Електронна пошта | 105 | caption: Електронна пошта |
| 106 | width: 175 | 106 | width: 175 |
| 107 | width_form: 250 | 107 | width_form: 250 |
| 108 | readonly: false | 108 | readonly: false |
| 109 | align: left | 109 | align: left |
| 110 | 110 | ||
| 111 | phone: | 111 | phone: |
| 112 | field: phone | 112 | field: phone |
| 113 | caption: Номер | 113 | caption: Номер |
| 114 | width: 100 | 114 | width: 100 |
| 115 | width_form: 250 | 115 | width_form: 250 |
| 116 | readonly: false | 116 | readonly: false |
| 117 | align: left | 117 | align: left |
| 118 | 118 | ||
| 119 | tab_number: | 119 | tab_number: |
| 120 | field: tab_number | 120 | field: tab_number |
| 121 | caption: Таб. номер | 121 | caption: Таб. номер |
| 122 | width: 75 | 122 | width: 75 |
| 123 | width_form: 250 | 123 | width_form: 250 |
| 124 | readonly: false | 124 | readonly: false |
| 125 | align: left | 125 | align: left |
| 126 | 126 | ||
| 127 | 127 | ||
| 128 | rolename: | 128 | rolename: |
| 129 | field: rolename | 129 | field: rolename |
| 130 | alias: r.rolename | 130 | alias: r.rolename |
| 131 | caption: Права | 131 | caption: Права |
| 132 | width: 150 | 132 | width: 150 |
| 133 | width_form: 250 | 133 | width_form: 250 |
| 134 | readonly: false | 134 | readonly: false |
| 135 | align: left | 135 | align: left |
| 136 | # type_field: DropDown | 136 | # type_field: DropDown |
| 137 | multy: false | 137 | multy: false |
| 138 | # sql: "select roleid as k, rolename as v from k2roles where (active='1') order by rolename" | 138 | # sql: "select roleid as k, rolename as v from k2roles where (active='1') order by rolename" |
| 139 | type_fieldform: DropDown | 139 | type_fieldform: DropDown |
| 140 | alias_form: roleid | 140 | alias_form: roleid |
| 141 | sql_form: select roleid as k, rolename as v from k2roles where (active='1') order by rolename | 141 | sql_form: select roleid as k, rolename as v from k2roles where (active='1') order by rolename |
| 142 | 142 | ||
| 143 | roleid: | 143 | roleid: |
| 144 | field: roleid | 144 | field: roleid |
| 145 | caption: | 145 | caption: |
| 146 | width: 150 | 146 | width: 150 |
| 147 | readonly: true | 147 | readonly: true |
| 148 | hidden: true | 148 | hidden: true |
| 149 | 149 | ||
| 150 | department_name: | 150 | department_name: |
| 151 | field: department_name | 151 | field: department_name |
| 152 | alias: d.department_name | 152 | alias: d.department_name |
| 153 | caption: Підрозділ | 153 | caption: Підрозділ |
| 154 | width: 150 | 154 | width: 150 |
| 155 | width_form: 250 | 155 | width_form: 250 |
| 156 | readonly: false | 156 | readonly: false |
| 157 | align: left | 157 | align: left |
| 158 | # type_field: DropDown | 158 | # type_field: DropDown |
| 159 | multy: false | 159 | multy: false |
| 160 | # sql: "select roleid as k, rolename as v from k2roles where (active='1') order by rolename" | 160 | # sql: "select roleid as k, rolename as v from k2roles where (active='1') order by rolename" |
| 161 | type_fieldform: DropDown | 161 | type_fieldform: DropDown |
| 162 | alias_form: departmentid | 162 | alias_form: departmentid |
| 163 | additems: | 163 | additems: |
| 164 | '': --------------- | 164 | '': --------------- |
| 165 | sql_form: select departmentid as k, department_name as v from k2department | 165 | sql_form: select departmentid as k, department_name as v from k2department |
| 166 | 166 | ||
| 167 | departmentid: | 167 | departmentid: |
| 168 | field: departmentid | 168 | field: departmentid |
| 169 | caption: | 169 | caption: |
| 170 | width: 150 | 170 | width: 150 |
| 171 | readonly: true | 171 | readonly: true |
| 172 | hidden: true | 172 | hidden: true |
| 173 | 173 | ||
| 174 | 174 | ||
| 175 | 175 |