mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-08-15 21:04:09 +00:00
fix rbac pam
This commit is contained in:
parent
7fb5fd3956
commit
24bd7b7e1a
@ -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
|
||||||
|
@ -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)
|
||||||
|
@ -31,7 +31,8 @@ __all__ = [
|
|||||||
"MFAMixin",
|
"MFAMixin",
|
||||||
"AuthMixin",
|
"AuthMixin",
|
||||||
"FaceMixin",
|
"FaceMixin",
|
||||||
"RoleMixin"
|
"RoleMixin",
|
||||||
|
"Source"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user