mirror of https://github.com/jumpserver/jumpserver
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1.0 KiB
35 lines
1.0 KiB
from django.core.exceptions import PermissionDenied |
|
|
|
from authentication.backends.base import JMSBaseAuthBackend |
|
|
|
|
|
class RBACBackend(JMSBaseAuthBackend): |
|
""" 只做权限校验 """ |
|
@staticmethod |
|
def is_enabled(): |
|
return True |
|
|
|
def authenticate(self, *args, **kwargs): |
|
return None |
|
|
|
def username_allow_authenticate(self, username): |
|
return False |
|
|
|
def has_perm(self, user_obj, perm, obj=None): |
|
if not user_obj.is_active or not perm: |
|
raise PermissionDenied() |
|
if perm == '*': |
|
return True |
|
if isinstance(perm, str): |
|
perm_set = set(i.strip() for i in perm.split('|')) |
|
elif isinstance(perm, (list, tuple, set)): |
|
perm_set = set(perm) |
|
else: |
|
raise ValueError('perm must be str, list, tuple or set') |
|
has_perm = bool(perm_set & set(user_obj.perms)) |
|
if not has_perm: |
|
raise PermissionDenied() |
|
return has_perm |
|
|
|
# def has_module_perms(self, user_obj, app_label): |
|
# return True
|
|
|