pub struct Role {
pub id: String,
pub name: String,
pub description: String,
pub permissions: HashSet<Permission>,
pub parent_roles: HashSet<String>,
pub metadata: HashMap<String, String>,
pub created_at: SystemTime,
pub updated_at: SystemTime,
}
Expand description
A role groups permissions and can be assigned to users
Fields§
§id: String
Unique role identifier
name: String
Human-readable role name
description: String
Role description
permissions: HashSet<Permission>
Permissions granted by this role
parent_roles: HashSet<String>
Parent roles (for hierarchical RBAC)
metadata: HashMap<String, String>
Role metadata
created_at: SystemTime
When the role was created
updated_at: SystemTime
When the role was last modified
Implementations§
Source§impl Role
impl Role
Sourcepub fn add_permission(&mut self, permission: Permission)
pub fn add_permission(&mut self, permission: Permission)
Add a permission to this role
Sourcepub fn remove_permission(&mut self, permission: &Permission)
pub fn remove_permission(&mut self, permission: &Permission)
Remove a permission from this role
Sourcepub fn add_parent_role(&mut self, role_id: impl Into<String>)
pub fn add_parent_role(&mut self, role_id: impl Into<String>)
Add a parent role
Sourcepub fn has_permission(
&self,
permission: &Permission,
context: &AccessContext,
) -> bool
pub fn has_permission( &self, permission: &Permission, context: &AccessContext, ) -> bool
Check if this role has a specific permission
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Role
impl<'de> Deserialize<'de> for Role
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Auto Trait Implementations§
impl Freeze for Role
impl RefUnwindSafe for Role
impl Send for Role
impl Sync for Role
impl Unpin for Role
impl UnwindSafe for Role
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more