InvenTree/InvenTree/users/apps.py

74 lines
2.2 KiB
Python

"""App configuration class for the 'users' app."""
import logging
from django.apps import AppConfig
from django.db.utils import OperationalError, ProgrammingError
import InvenTree.ready
logger = logging.getLogger('inventree')
class UsersConfig(AppConfig):
"""Config class for the 'users' app."""
name = 'users'
def ready(self):
"""Called when the 'users' app is loaded at runtime."""
# skip loading if plugin registry is not loaded or we run in a background thread
if (
not InvenTree.ready.isPluginRegistryLoaded()
or not InvenTree.ready.isInMainThread()
):
return
# Skip if running migrations
if InvenTree.ready.isRunningMigrations():
return
if InvenTree.ready.canAppAccessDatabase(allow_test=True):
try:
self.assign_permissions()
except (OperationalError, ProgrammingError):
pass
try:
self.update_owners()
except (OperationalError, ProgrammingError):
pass
def assign_permissions(self):
"""Update role permissions for existing groups."""
from django.contrib.auth.models import Group
from users.models import RuleSet, update_group_roles
# First, delete any rule_set objects which have become outdated!
for rule in RuleSet.objects.all():
if (
rule.name not in RuleSet.RULESET_NAMES
): # pragma: no cover # can not change ORM without the app being loaded
logger.info('Deleting outdated ruleset: %s', rule.name)
rule.delete()
# Update group permission assignments for all groups
for group in Group.objects.all():
update_group_roles(group)
def update_owners(self):
"""Create an 'owner' object for each user and group instance."""
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from users.models import Owner
# Create group owners
for group in Group.objects.all():
Owner.create(group)
# Create user owners
for user in get_user_model().objects.all():
Owner.create(user)