50 lines
1.8 KiB
Python
Executable File
50 lines
1.8 KiB
Python
Executable File
from . import db
|
|
|
|
class User(db.Model):
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
username = db.Column(db.String(80), unique=True, nullable=False)
|
|
password = db.Column(db.String(120), nullable=False)
|
|
role = db.Column(db.String(20), nullable=False) # Role: superadmin, admin, manager, worker
|
|
modules = db.Column(db.Text, nullable=True) # JSON string of assigned modules: ["quality", "warehouse"]
|
|
|
|
def __repr__(self):
|
|
return f'<User {self.username}>'
|
|
|
|
def get_modules(self):
|
|
"""Get user's assigned modules as a list"""
|
|
if not self.modules:
|
|
return []
|
|
try:
|
|
import json
|
|
return json.loads(self.modules)
|
|
except:
|
|
return []
|
|
|
|
def set_modules(self, module_list):
|
|
"""Set user's assigned modules from a list"""
|
|
if not module_list:
|
|
self.modules = None
|
|
else:
|
|
import json
|
|
self.modules = json.dumps(module_list)
|
|
|
|
def add_module(self, module):
|
|
"""Add a module to user's assignments"""
|
|
current_modules = self.get_modules()
|
|
if module not in current_modules:
|
|
current_modules.append(module)
|
|
self.set_modules(current_modules)
|
|
|
|
def remove_module(self, module):
|
|
"""Remove a module from user's assignments"""
|
|
current_modules = self.get_modules()
|
|
if module in current_modules:
|
|
current_modules.remove(module)
|
|
self.set_modules(current_modules)
|
|
|
|
def has_module(self, module):
|
|
"""Check if user has access to a specific module"""
|
|
# Superadmin and admin have access to all modules
|
|
if self.role in ['superadmin', 'admin']:
|
|
return True
|
|
return module in self.get_modules() |