from flask_admin.contrib.sqla import ModelView from flask_security import current_user from src import admin, db from src.user.models import User, Device, UserDevice, Role, UserRole, Rider, RiderDevice, Group, DeviceGroup class MyModel(ModelView): page_size = 100 can_set_page_size = True can_view_details = True def is_accessible(self): return current_user.has_role('admin') admin.add_view(MyModel(User, session=db.session)) admin.add_view(MyModel(Role, session=db.session)) admin.add_view(MyModel(UserRole, session=db.session)) admin.add_view(MyModel(Device, session=db.session)) admin.add_view(MyModel(UserDevice, session=db.session)) admin.add_view(MyModel(Rider, session=db.session)) admin.add_view(MyModel(RiderDevice, session=db.session)) admin.add_view(MyModel(Group, session=db.session)) admin.add_view(MyModel(DeviceGroup, session=db.session))
column_exclude_list = ('password') page_size = 100 can_set_page_size = True can_view_details = True def is_accessible(self): if not current_user.is_authenticated or not current_user.has_role( 'admin'): # permission denied abort(403) if current_user.has_role('admin'): return True return False def _handle_view(self, name, **kwargs): """ Override builtin _handle_view in order to redirect users when a view is not accessible. """ if not self.is_accessible(): if current_user.is_authenticated: # permission denied abort(403) admin.add_view(MyAdminModel(User, session=db.session)) admin.add_view(MyAdminModel(Role, session=db.session)) admin.add_view(MyAdminModel(UserRole, session=db.session)) admin.add_view(MyAdminModel(Notification, session=db.session))
password, current_app.config.get("BCRYPT_LOG_ROUNDS")).decode() def encode_token(self, user_id, token_type): if token_type == "access": seconds = current_app.config.get("ACCESS_TOKEN_EXPIRATION") else: seconds = current_app.config.get("REFRESH_TOKEN_EXPIRATION") payload = { "exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=seconds), "iat": datetime.datetime.utcnow(), "sub": user_id, } return jwt.encode(payload, current_app.config.get("SECRET_KEY"), algorithm="HS256") @staticmethod def decode_token(token): payload = jwt.decode(token, current_app.config.get("SECRET_KEY")) return payload["sub"] if os.getenv("FLASK_ENV") == "development": from src import admin from src.api.users.admin import UsersAdminView admin.add_view(UsersAdminView(User, db.session))
from sqlalchemy.sql import func from src import db class Review(db.Model): __tablename__ = "reviews" id = db.Column(db.Integer, primary_key=True, autoincrement=True) user_id = db.Column(db.Integer, db.ForeignKey("users.id"), nullable=False) place_id = db.Column(db.Integer, db.ForeignKey("places.id"), nullable=False) created_date = db.Column(db.DateTime, default=func.now(), nullable=False) rating = db.Column(db.Integer, nullable=False) text = db.Column(db.String, nullable=True) # images = db.relationship("Image", cascade = "delete") def __init__(self, **kwargs): self.user_id = kwargs.get("user_id") self.place_id = kwargs.get("place_id") self.rating = kwargs.get("rating") self.text = kwargs.get("text") # self.images = kwargs.get("images") if os.getenv("FLASK_ENV") == "development": from src import admin from src.api.reviews.admin import ReviewsAdminView admin.add_view(ReviewsAdminView(Review, db.session))
from flask_admin_impexp.admin_impexp import AdminImportExport from src import admin, db from src.user.models import User, UserProfile, Role, Permission, UserRole from src.user.schemas import UserProfileSchema, UserSchema, UserRoleSchema class MyModel(AdminImportExport): pass admin.add_view(MyModel(User, session=db.session, schema=UserSchema)) admin.add_view( MyModel(UserProfile, session=db.session, schema=UserProfileSchema)) admin.add_view(MyModel(Role, session=db.session)) admin.add_view(MyModel(UserRole, session=db.session, schema=UserRoleSchema)) admin.add_view(MyModel(Permission, session=db.session))
import os from flask_admin.contrib.sqla import ModelView from sqlalchemy.sql import func from src import db class User(db.Model): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(128), nullable=False) email = db.Column(db.String(128), nullable=False) active = db.Column(db.Boolean(), default=True, nullable=False) created_date = db.Column(db.DateTime, default=func.now(), nullable=False) def __init__(self, username, email): self.username = username self.email = email if os.getenv("FLASK_ENV") == "development": from src import admin admin.add_view(ModelView(User, db.session))
name = db.Column(db.String, nullable=False) lat = db.Column(db.Float, nullable=False) lon = db.Column(db.Float, nullable=False) coords = db.Column(Geography(geometry_type="POINT", srid=4326), nullable=False) types = db.Column(db.VARCHAR(255), nullable=False) def __init__(self, lat, lon, name, types): # self.coords = f"POINT({lon} {lat})" self.coords = f"POINT({lat} {lon})" self.name = name self.types = types self.lat = lat self.lon = lon def serialize(self): return { "name": self.name, "latitude": self.lat, "longitude": self.lon, "types": self.types, } if os.getenv("FLASK_ENV") == "development": from src import admin from src.api.places.admin import PlacesAdminView admin.add_view(PlacesAdminView(Place, db.session))
class MyModel(AdminImportExport): page_size = 100 column_display_pk = True def is_accessible(self): return current_user.has_role('admin') class RetailShopAdmin(MyModel): form_excluded_columns = ('products', 'orders', 'brands', 'distributors') admin.add_view(MyModel(User, session=db.session)) admin.add_view(MyModel(Customer, session=db.session)) admin.add_view(MyModel(Role, session=db.session)) admin.add_view(MyModel(UserRole, session=db.session)) admin.add_view(MyModel(PermissionSet, session=db.session)) admin.add_view(RetailShopAdmin(RetailShop, session=db.session)) admin.add_view(MyModel(RetailBrand, session=db.session)) admin.add_view(MyModel(UserRetailShop, session=db.session)) admin.add_view(MyModel(RegistrationDetail, session=db.session)) admin.add_view(MyModel(Address, session=db.session)) admin.add_view(MyModel(Locality, session=db.session)) admin.add_view(MyModel(City, session=db.session)) admin.add_view(MyModel(ProductTax, session=db.session)) admin.add_view(MyModel(Tag, session=db.session)) admin.add_view(MyModel(AddOn, session=db.session))
from flask_admin.contrib.sqla import ModelView from flask_security import current_user from src import admin, db from src.user.models import User, Role, UserRole, UserToUser from src.dues.models import Due, Payment class MyModel(ModelView): page_size = 100 can_set_page_size = True can_view_details = True def is_accessible(self): return current_user.has_role('admin') admin.add_view(MyModel(User, session=db.session)) admin.add_view(MyModel(Role, session=db.session)) admin.add_view(MyModel(UserRole, session=db.session)) admin.add_view(MyModel(Due, session=db.session)) admin.add_view(MyModel(Payment, session=db.session)) admin.add_view(MyModel(UserToUser, session=db.session))
from flask import render_template from flask_security import login_required, current_user from flask_admin.contrib import sqla from src import admin, db from src.user.models import User, UserProfile, Role @login_required def index(): return render_template('index.html') class MyModel(sqla.ModelView): column_display_pk = True def is_accessible(self): return current_user.has_role('admin') admin.add_view(MyModel(User, session=db.session)) admin.add_view(MyModel(UserProfile, session=db.session)) admin.add_view(MyModel(Role, session=db.session))
from flask import render_template from flask_security import login_required, current_user from flask_admin.contrib import sqla from src import admin, db from src.user.models import User, UserProfile, Role @login_required def index(): return render_template('index.html') class MyModel(sqla.ModelView): column_display_pk = True # def is_accessible(self): # return current_user.has_role('admin') admin.add_view(MyModel(User, session=db.session)) admin.add_view(MyModel(UserProfile, session=db.session)) admin.add_view(MyModel(Role, session=db.session))
# src/api/users/models.py import os # new from sqlalchemy.sql import func from src import db class User(db.Model): __tablename__ = "users" id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(128), nullable=False) email = db.Column(db.String(128), nullable=False) active = db.Column(db.Boolean(), default=True, nullable=False) created_date = db.Column(db.DateTime, default=func.now(), nullable=False) def __init__(self, username, email): self.username = username self.email = email # new if os.getenv("FLASK_ENV") == "development": from src import admin from src.api.users.admin import UsersAdminView # new admin.add_view(UsersAdminView(User, db.session)) # updated
column_exclude_list = ('password') page_size = 100 can_set_page_size = True can_view_details = True def is_accessible(self): if not current_user.is_authenticated or not current_user.has_role('admin'): # permission denied abort(403) if current_user.has_role('admin'): return True return False def _handle_view(self, name, **kwargs): """ Override builtin _handle_view in order to redirect users when a view is not accessible. """ if not self.is_accessible(): if current_user.is_authenticated: # permission denied abort(403) admin.add_view(MyAdminModel(User, session=db.session)) admin.add_view(MyAdminModel(Role, session=db.session)) admin.add_view(MyAdminModel(UserRole, session=db.session)) admin.add_view(MyAdminModel(Housing, session=db.session))