feature: implements user profile quotas update

This commit is contained in:
ievgenii vdovenko 2025-11-14 17:06:25 +01:00
parent a960c9f99c
commit 0e08a98987
8 changed files with 139 additions and 4 deletions

View file

@ -961,6 +961,27 @@ def admin_routes(config):
request_method="POST",
)
# user quotas
config.add_route(name="edit_user_quotas", pattern=r"/users/{user_id:\d+}/edit/quotas", user_route=True)
config.add_view(
UsersView,
attr="user_quotas",
route_name="edit_user_quotas",
request_method="GET",
renderer="rhodecode:templates/admin/users/user_edit.mako",
)
config.add_route(
name="edit_user_quotas_update", pattern=r"/users/{user_id:\d+}/edit/quotas/update", user_route=True
)
config.add_view(
UsersView,
attr="user_quotas_update",
route_name="edit_user_quotas_update",
request_method="POST",
renderer="rhodecode:templates/admin/users/user_edit.mako",
)
# user audit logs
config.add_route(name="edit_user_audit_logs", pattern=r"/users/{user_id:\d+}/edit/audit", user_route=True)
config.add_view(

View file

@ -55,8 +55,10 @@ from rhodecode.model.forms import (
UserPermissionsForm,
UserExtraEmailForm,
UserExtraIpForm,
UserQuotasUpdateForm,
)
from rhodecode.model.permission import PermissionModel
from rhodecode.model.quota_model import UserQuotaModel
from rhodecode.model.repo_group import RepoGroupModel
from rhodecode.model.ssh_key import SshKeyModel
from rhodecode.model.user import UserModel
@ -283,6 +285,9 @@ class UsersView(UserAppView):
("zh", "Chinese (zh)"),
]
app_settings = c.rc_config
c.quotas_enabled = app_settings.get("rhodecode_user_quotas_enabled", UserQuotaModel.DEFAULT_QUOTAS_ENABLED)
c.allowed_extern_types = [(x.uid, x.get_display_name()) for x in self.get_auth_plugins()]
perms = req.registry.settings.get("available_permissions")
if not perms:
@ -1122,6 +1127,43 @@ class UsersView(UserAppView):
return HTTPFound(h.route_path("edit_user_groups_management", user_id=user_id))
@LoginRequired()
@HasPermissionAllDecorator("hg.admin")
def user_quotas(self):
_ = self.request.translate
c = self.load_default_context()
c.user = self.db_user
quota_model = UserQuotaModel(c.user)
c.active = "user_quotas"
c.user_repo_quotas = quota_model.formatted_user_max_repository_count_allowance()
c.user_repo_count = quota_model.user_repositories_count
return self._get_template_context(c)
@LoginRequired()
@HasPermissionAllDecorator("hg.admin")
def user_quotas_update(self):
_ = self.request.translate
c = self.load_default_context()
c.user = self.db_user
c.active = "user_quotas"
user_form = UserQuotasUpdateForm()()
try:
quota_model = UserQuotaModel(c.user)
form_result = user_form.to_python(dict(self.request.POST))
quota_model.user_max_repository_count_allowance = form_result["user_repo_quotas"]
h.flash(_("Updated user '%s' repository quota") % c.user.username, category="success")
except Exception as e:
log.exception("Exception updating user quotas, %s", e)
h.flash(
_("Exception updating user quotas of user %s") % self.request.POST.get("username"), category="error"
)
raise HTTPFound(h.route_path("edit_user_quotas", user_id=c.user.user_id))
@LoginRequired()
@HasPermissionAllDecorator("hg.admin")
def user_audit_logs(self):