Skip to content

Commit 7bc5e9c

Browse files
Correction
1 parent b30a2a8 commit 7bc5e9c

2 files changed

Lines changed: 24 additions & 35 deletions

File tree

guardpost/authorization.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
from guardpost.abc import BaseStrategy
99
from guardpost.authentication import Identity
10-
from guardpost.common import RolesRequirement
1110

1211

1312
class AuthorizationError(Exception):
@@ -34,6 +33,29 @@ async def handle(self, context: "AuthorizationContext"):
3433
"""Handles this requirement for a given context."""
3534

3635

36+
class RolesRequirement(Requirement):
37+
"""
38+
Requires an identity with certain roles.
39+
Supports defining sufficient roles (any one is enough).
40+
"""
41+
42+
__slots__ = ("_roles",)
43+
44+
def __init__(self, roles: Optional[Sequence[str]] = None):
45+
self._roles = list(roles) if roles else None
46+
47+
def handle(self, context: "AuthorizationContext"):
48+
identity = context.identity
49+
50+
if not identity:
51+
context.fail("Missing identity")
52+
return
53+
54+
if self._roles:
55+
if any(identity.has_role(name) for name in self._roles):
56+
context.succeed(self)
57+
58+
3759
RequirementConfType = Union[Requirement, Type[Requirement]]
3860

3961

guardpost/common.py

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from collections.abc import Mapping
2-
from typing import Mapping as MappingType, Optional
2+
from typing import Mapping as MappingType
33
from typing import Sequence, Union
44

55
from .authorization import AuthorizationContext, Policy, Requirement
@@ -64,36 +64,3 @@ def handle(self, context: AuthorizationContext):
6464
else:
6565
if all(identity.has_claim(name) for name in self.required_claims):
6666
context.succeed(self)
67-
68-
69-
class RolesRequirement(Requirement):
70-
"""
71-
Requires an identity with certain roles.
72-
Supports defining sufficient roles (any one is enough), and required roles (all
73-
must be present).
74-
"""
75-
76-
__slots__ = ("_roles", "_required_roles")
77-
78-
def __init__(
79-
self,
80-
roles: Optional[Sequence[str]] = None,
81-
required_roles: Optional[Sequence[str]] = None,
82-
):
83-
self._required_roles = list(required_roles) if required_roles else None
84-
self._roles = list(roles) if roles else None
85-
86-
def handle(self, context: AuthorizationContext):
87-
identity = context.identity
88-
89-
if not identity:
90-
context.fail("Missing identity")
91-
return
92-
93-
if self._roles:
94-
if any(identity.has_role(name) for name in self._roles):
95-
context.succeed(self)
96-
97-
if self._required_roles:
98-
if all(identity.has_role(name) for name in self._required_roles):
99-
context.succeed(self)

0 commit comments

Comments
 (0)