admin panel layout
This commit is contained in:
parent
d6a8406c08
commit
bdbf364457
@ -15,16 +15,16 @@ from flask import (
|
|||||||
)
|
)
|
||||||
from werkzeug.security import check_password_hash, generate_password_hash
|
from werkzeug.security import check_password_hash, generate_password_hash
|
||||||
|
|
||||||
from .config import Config
|
from config import Config
|
||||||
from .db import get_connection, fetchone_dict, fetchall_dict
|
from db import get_connection, fetchone_dict, fetchall_dict
|
||||||
from .auth import login_required
|
from auth import login_required
|
||||||
from .permissions import is_video_allowed_for_level
|
from permissions import is_video_allowed_for_level
|
||||||
from .logging_config import setup_logging
|
from security import (
|
||||||
from .security import (
|
|
||||||
admin_required,
|
admin_required,
|
||||||
get_current_user,
|
get_current_user,
|
||||||
get_current_user_mandant_level,
|
get_current_user_mandant_level,
|
||||||
)
|
)
|
||||||
|
from logging_config import setup_logging
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
app.config.from_object(Config)
|
app.config.from_object(Config)
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
from functools import wraps
|
from functools import wraps
|
||||||
from flask import session, redirect, url_for, request, abort
|
from flask import session, redirect, url_for, request, abort
|
||||||
|
|
||||||
from .db import get_connection
|
from db import get_connection
|
||||||
|
|
||||||
|
|
||||||
def get_current_user_mandant_level():
|
def get_current_user_mandant_level():
|
||||||
|
|||||||
@ -171,14 +171,28 @@ p {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.btn-danger {
|
.btn-danger {
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
height: 48px;
|
||||||
|
padding: 0 20px;
|
||||||
|
border-radius: 12px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-decoration: none;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
background: #b62323;
|
background: #b62323;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
border: none;
|
border: 1px solid #b62323;
|
||||||
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-small {
|
.btn-small {
|
||||||
height: 40px;
|
height: 40px;
|
||||||
min-width: 100px;
|
min-width: 100px;
|
||||||
|
padding: 0 16px;
|
||||||
|
font-size: 14px;
|
||||||
|
border-radius: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =========================
|
/* =========================
|
||||||
@ -261,7 +275,48 @@ p {
|
|||||||
gap: 16px;
|
gap: 16px;
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
}
|
}
|
||||||
|
/* =========================
|
||||||
|
ADMIN FORM LAYOUT
|
||||||
|
========================= */
|
||||||
|
|
||||||
|
.admin-grid-form {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 200px minmax(320px, 1fr);
|
||||||
|
gap: 14px 20px;
|
||||||
|
align-items: center;
|
||||||
|
max-width: 760px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-grid-form .form-row {
|
||||||
|
display: contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-grid-form label {
|
||||||
|
margin: 0;
|
||||||
|
font-weight: 700;
|
||||||
|
color: #0d2f57;
|
||||||
|
}
|
||||||
|
|
||||||
|
.admin-grid-form input[type="text"],
|
||||||
|
.admin-grid-form input[type="email"],
|
||||||
|
.admin-grid-form input[type="number"] {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 46px;
|
||||||
|
padding: 10px 12px;
|
||||||
|
border: 1px solid #cfd8e3;
|
||||||
|
border-radius: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-row-full {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
.table-actions .btn-primary,
|
||||||
|
.table-actions .btn-danger {
|
||||||
|
min-width: 110px;
|
||||||
|
}
|
||||||
/* =========================
|
/* =========================
|
||||||
10. TABLES
|
10. TABLES
|
||||||
========================= */
|
========================= */
|
||||||
|
|||||||
@ -2,4 +2,12 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
APP_DIR = os.path.join(BASE_DIR, "app")
|
||||||
|
|
||||||
|
if APP_DIR not in sys.path:
|
||||||
|
sys.path.insert(0, APP_DIR)
|
||||||
|
|
||||||
|
if BASE_DIR not in sys.path:
|
||||||
sys.path.insert(0, BASE_DIR)
|
sys.path.insert(0, BASE_DIR)
|
||||||
|
|
||||||
|
os.environ["LOG_DIR"] = "./logs"
|
||||||
@ -1,4 +1,4 @@
|
|||||||
import pytest
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
os.environ["DB_HOST"] = "192.168.0.10"
|
os.environ["DB_HOST"] = "192.168.0.10"
|
||||||
@ -9,6 +9,7 @@ os.environ["DB_PORT"] = "55432"
|
|||||||
os.environ["LOG_DIR"] = "./logs"
|
os.environ["LOG_DIR"] = "./logs"
|
||||||
|
|
||||||
from app.app import app
|
from app.app import app
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
from app.permissions import is_video_allowed_for_level
|
from permissions import is_video_allowed_for_level
|
||||||
|
|
||||||
|
|
||||||
def test_level_0_sees_everything():
|
def test_level_0_sees_everything():
|
||||||
assert is_video_allowed_for_level("A1.mp4", 0) is True
|
assert is_video_allowed_for_level("A1.mp4", 0) is True
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user