mirror of
https://github.com/inventree/InvenTree.git
synced 2025-09-13 14:11:37 +00:00
chore(backend): improve coverage (#10226)
* remove unneeded helper * remove unnecessary coverage * ignore catch-all pervisions in app setup * remove unused function * this was replaced by get_model_permission_string
This commit is contained in:
@@ -33,16 +33,16 @@ class UsersConfig(AppConfig):
|
|||||||
from users.tasks import rebuild_all_permissions
|
from users.tasks import rebuild_all_permissions
|
||||||
|
|
||||||
rebuild_all_permissions()
|
rebuild_all_permissions()
|
||||||
except (OperationalError, ProgrammingError):
|
except (OperationalError, ProgrammingError): # pragma: no cover
|
||||||
pass
|
pass
|
||||||
except Exception as e:
|
except Exception as e: # pragma: no cover
|
||||||
logger.exception('Failed to rebuild permissions: %s', e)
|
logger.exception('Failed to rebuild permissions: %s', e)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.update_owners()
|
self.update_owners()
|
||||||
except (OperationalError, ProgrammingError):
|
except (OperationalError, ProgrammingError): # pragma: no cover
|
||||||
pass
|
pass
|
||||||
except Exception as e:
|
except Exception as e: # pragma: no cover
|
||||||
logger.exception('Failed to update owners: %s', e)
|
logger.exception('Failed to update owners: %s', e)
|
||||||
|
|
||||||
def update_owners(self):
|
def update_owners(self):
|
||||||
|
@@ -75,17 +75,6 @@ def default_token_expiry():
|
|||||||
return InvenTree.helpers.current_date() + datetime.timedelta(days=365)
|
return InvenTree.helpers.current_date() + datetime.timedelta(days=365)
|
||||||
|
|
||||||
|
|
||||||
def default_create_token(token_model, user, serializer):
|
|
||||||
"""Generate a default value for the token."""
|
|
||||||
token = token_model.objects.filter(user=user, name='', revoked=False)
|
|
||||||
|
|
||||||
if token.exists():
|
|
||||||
return token.first()
|
|
||||||
|
|
||||||
else:
|
|
||||||
return token_model.objects.create(user=user, name='')
|
|
||||||
|
|
||||||
|
|
||||||
class ApiToken(AuthToken, InvenTree.models.MetadataMixin):
|
class ApiToken(AuthToken, InvenTree.models.MetadataMixin):
|
||||||
"""Extends the default token model provided by djangorestframework.authtoken.
|
"""Extends the default token model provided by djangorestframework.authtoken.
|
||||||
|
|
||||||
|
@@ -55,19 +55,6 @@ def split_permission(app: str, perm: str) -> tuple[str, str]:
|
|||||||
return perm, model
|
return perm, model
|
||||||
|
|
||||||
|
|
||||||
def model_permission_string(model: models.Model, permission: str) -> str:
|
|
||||||
"""Generate a permission string for a given model and permission type.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
model: The model class to check (e.g. 'part')
|
|
||||||
permission: The permission to check (e.g. 'view' / 'delete')
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
str: The permission string (e.g. 'part.view_part')
|
|
||||||
"""
|
|
||||||
return f'{model._meta.app_label}.{permission}_{model._meta.model_name}'
|
|
||||||
|
|
||||||
|
|
||||||
def check_user_role(
|
def check_user_role(
|
||||||
user: User, role: str, permission: str, allow_inactive: bool = False
|
user: User, role: str, permission: str, allow_inactive: bool = False
|
||||||
) -> bool:
|
) -> bool:
|
||||||
|
@@ -117,23 +117,6 @@ def generate_permission_dict(permissions) -> dict:
|
|||||||
return perms
|
return perms
|
||||||
|
|
||||||
|
|
||||||
def generate_roles_dict(roles) -> dict:
|
|
||||||
"""Generate a dictionary of roles for a given set of roles."""
|
|
||||||
# Build out an (initially empty) dictionary of roles
|
|
||||||
role_dict = {name: [] for name, _ in RULESET_CHOICES}
|
|
||||||
|
|
||||||
for role in roles:
|
|
||||||
permissions = []
|
|
||||||
|
|
||||||
for permission in ['view', 'add', 'change', 'delete']:
|
|
||||||
if getattr(role, f'can_{permission}', False):
|
|
||||||
permissions.append(permission)
|
|
||||||
|
|
||||||
role_dict[role.name] = permissions
|
|
||||||
|
|
||||||
return role_dict
|
|
||||||
|
|
||||||
|
|
||||||
class GetAuthTokenSerializer(serializers.Serializer):
|
class GetAuthTokenSerializer(serializers.Serializer):
|
||||||
"""Serializer for the GetAuthToken API endpoint."""
|
"""Serializer for the GetAuthToken API endpoint."""
|
||||||
|
|
||||||
@@ -277,7 +260,7 @@ class GroupSerializer(InvenTreeModelSerializer):
|
|||||||
if not user_detail:
|
if not user_detail:
|
||||||
self.fields.pop('users', None)
|
self.fields.pop('users', None)
|
||||||
|
|
||||||
except AppRegistryNotReady:
|
except AppRegistryNotReady: # pragma: no cover
|
||||||
pass
|
pass
|
||||||
|
|
||||||
permissions = serializers.SerializerMethodField(allow_null=True, read_only=True)
|
permissions = serializers.SerializerMethodField(allow_null=True, read_only=True)
|
||||||
@@ -421,13 +404,8 @@ class UserCreateSerializer(ExtendedUserSerializer):
|
|||||||
user = self.context['request'].user
|
user = self.context['request'].user
|
||||||
|
|
||||||
# Check that the user trying to create a new user is a superuser
|
# Check that the user trying to create a new user is a superuser
|
||||||
if not user.is_staff:
|
if not user.is_staff or not check_user_role(user, RuleSetEnum.ADMIN, 'add'):
|
||||||
raise serializers.ValidationError(
|
raise serializers.ValidationError( # pragma: no cover # Handled by permissions already
|
||||||
_('Only staff users can create new users')
|
|
||||||
)
|
|
||||||
|
|
||||||
if not check_user_role(user, RuleSetEnum.ADMIN, 'add'):
|
|
||||||
raise serializers.ValidationError(
|
|
||||||
_('You do not have permission to create users')
|
_('You do not have permission to create users')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user