fix rbac pam

This commit is contained in:
feng 2025-08-12 11:18:18 +08:00 committed by ZhaoJiSen
parent 7fb5fd3956
commit 24bd7b7e1a
3 changed files with 10 additions and 18 deletions

View File

@ -45,10 +45,10 @@ class CheckAccountAutomationViewSet(OrgBulkModelViewSet):
class CheckAccountExecutionViewSet(AutomationExecutionViewSet): class CheckAccountExecutionViewSet(AutomationExecutionViewSet):
rbac_perms = ( rbac_perms = (
("list", "accounts.view_checkaccountexecution"), ("list", "accounts.view_checkaccountexecution"),
("retrieve", "accounts.view_checkaccountsexecution"), ("retrieve", "accounts.view_checkaccountexecution"),
("create", "accounts.add_checkaccountexecution"), ("create", "accounts.add_checkaccountexecution"),
("adhoc", "accounts.add_checkaccountexecution"), ("adhoc", "accounts.add_checkaccountexecution"),
("report", "accounts.view_checkaccountsexecution"), ("report", "accounts.view_checkaccountexecution"),
) )
ordering = ("-date_created",) ordering = ("-date_created",)
tp = AutomationTypes.check_account tp = AutomationTypes.check_account

View File

@ -4,6 +4,7 @@ from collections import defaultdict
from django.db.models import Count, Q from django.db.models import Count, Q
from django.http.response import JsonResponse from django.http.response import JsonResponse
from django.utils.translation import gettext_lazy as _
from rest_framework.views import APIView from rest_framework.views import APIView
from audits.const import LoginStatusChoices from audits.const import LoginStatusChoices
@ -12,12 +13,10 @@ from common.permissions import IsValidLicense
from common.utils import lazyproperty from common.utils import lazyproperty
from rbac.permissions import RBACPermission from rbac.permissions import RBACPermission
from reports.mixins import DateRangeMixin from reports.mixins import DateRangeMixin
from users.models import User, Source
__all__ = ['UserReportApi'] __all__ = ['UserReportApi']
from users.models import User
from users.models.user import Source
class UserReportApi(DateRangeMixin, APIView): class UserReportApi(DateRangeMixin, APIView):
http_method_names = ['get'] http_method_names = ['get']
@ -37,12 +36,13 @@ class UserReportApi(DateRangeMixin, APIView):
metrics = [len(data.get(str(d), set())) for d in self.date_range_list] metrics = [len(data.get(str(d), set())) for d in self.date_range_list]
return metrics return metrics
def get_user_login_method_metrics(self): def get_user_login_method_metrics(self, source_map):
filtered_queryset = self.filter_by_date_range(self.user_login_log_queryset, 'datetime') filtered_queryset = self.filter_by_date_range(self.user_login_log_queryset, 'datetime')
backends = set() backends = set()
data = defaultdict(lambda: defaultdict(set)) data = defaultdict(lambda: defaultdict(set))
for t, username, backend in filtered_queryset.values_list('datetime', 'username', 'backend'): for t, username, backend in filtered_queryset.values_list('datetime', 'username', 'backend'):
backend = str(source_map.get(backend.lower(), backend))
backends.add(backend) backends.add(backend)
date_str = str(t.date()) date_str = str(t.date())
data[date_str][backend].add(username) data[date_str][backend].add(username)
@ -54,15 +54,6 @@ class UserReportApi(DateRangeMixin, APIView):
metrics[backend].append(len(username.get(backend, set()))) metrics[backend].append(len(username.get(backend, set())))
return metrics return metrics
def get_user_login_region_distribution(self):
filtered_queryset = self.filter_by_date_range(self.user_login_log_queryset, 'datetime')
data = filtered_queryset.values('city').annotate(
user_count=Count('username', distinct=True)
).order_by('-user_count')
metrics = [{'name': d['city'], 'value': d['user_count']} for d in data]
return metrics
def get_user_login_time_metrics(self): def get_user_login_time_metrics(self):
time_buckets = { time_buckets = {
'00:00-06:00': (0, 6), '00:00-06:00': (0, 6),
@ -108,6 +99,7 @@ class UserReportApi(DateRangeMixin, APIView):
data['user_stats'] = user_stats data['user_stats'] = user_stats
source_map = Source.as_dict() source_map = Source.as_dict()
source_map.update({'password': _('Password')})
user_by_source = defaultdict(int) user_by_source = defaultdict(int)
for source in self.user_qs.values_list('source', flat=True): for source in self.user_qs.values_list('source', flat=True):
k = source_map.get(source, source) k = source_map.get(source, source)
@ -122,8 +114,7 @@ class UserReportApi(DateRangeMixin, APIView):
} }
data['user_login_method_metrics'] = { data['user_login_method_metrics'] = {
'dates_metrics_date': self.dates_metrics_date, 'dates_metrics_date': self.dates_metrics_date,
'dates_metrics_total': self.get_user_login_method_metrics(), 'dates_metrics_total': self.get_user_login_method_metrics(source_map),
} }
data['user_login_region_distribution'] = self.get_user_login_region_distribution()
data['user_login_time_metrics'] = self.get_user_login_time_metrics() data['user_login_time_metrics'] = self.get_user_login_time_metrics()
return JsonResponse(data, status=200) return JsonResponse(data, status=200)

View File

@ -31,7 +31,8 @@ __all__ = [
"MFAMixin", "MFAMixin",
"AuthMixin", "AuthMixin",
"FaceMixin", "FaceMixin",
"RoleMixin" "RoleMixin",
"Source"
] ]