pub struct DMSCPermissionManager { /* private fields */ }Expand description
Permission manager for handling permissions, roles, and user assignments.
This struct manages the entire RBAC system, including:
- Permission CRUD operations
- Role CRUD operations
- User role assignments
- Permission checking for users
Implementations§
Source§impl DMSCPermissionManager
impl DMSCPermissionManager
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new permission manager with default system roles.
Initializes the manager with two default system roles:
admin: Has wildcard permission (“*”) for all accessuser: Has basic user permissions
Performance Note: This method uses blocking_write during initialization
to set up default roles. For production use, consider using new_async() or
lazy initialization patterns to avoid blocking the async runtime.
§Returns
A new instance of DMSCPermissionManager
Sourcepub async fn new_async() -> Self
pub async fn new_async() -> Self
Creates a new permission manager asynchronously with default system roles.
This is the preferred method for creating a permission manager in async contexts as it avoids blocking the runtime during initialization.
Initializes the manager with two default system roles:
admin: Has wildcard permission (“*”) for all accessuser: Has basic user permissions
§Returns
A new instance of DMSCPermissionManager
Sourcepub async fn create_permission(
&self,
permission: DMSCPermission,
) -> DMSCResult<()>
pub async fn create_permission( &self, permission: DMSCPermission, ) -> DMSCResult<()>
Sourcepub async fn get_permission(
&self,
permission_id: &str,
) -> DMSCResult<Option<DMSCPermission>>
pub async fn get_permission( &self, permission_id: &str, ) -> DMSCResult<Option<DMSCPermission>>
Sourcepub async fn create_role(&self, role: DMSCRole) -> DMSCResult<()>
pub async fn create_role(&self, role: DMSCRole) -> DMSCResult<()>
Sourcepub async fn assign_role_to_user(
&self,
user_id: String,
role_id: String,
) -> DMSCResult<bool>
pub async fn assign_role_to_user( &self, user_id: String, role_id: String, ) -> DMSCResult<bool>
Sourcepub async fn remove_role_from_user(
&self,
user_id: &str,
role_id: &str,
) -> DMSCResult<bool>
pub async fn remove_role_from_user( &self, user_id: &str, role_id: &str, ) -> DMSCResult<bool>
Sourcepub async fn get_user_roles(&self, user_id: &str) -> DMSCResult<Vec<DMSCRole>>
pub async fn get_user_roles(&self, user_id: &str) -> DMSCResult<Vec<DMSCRole>>
Sourcepub async fn has_permission(
&self,
user_id: &str,
permission_id: &str,
) -> DMSCResult<bool>
pub async fn has_permission( &self, user_id: &str, permission_id: &str, ) -> DMSCResult<bool>
Checks if a user has a specific permission.
§Parameters
user_id: User ID to checkpermission_id: Permission ID to check for
§Returns
true if the user has the permission, otherwise false
§Notes
- Users with the wildcard permission (“*”) have all permissions
- Permission checking is done by examining all roles assigned to the user
Sourcepub async fn has_any_permission(
&self,
user_id: &str,
permissions: &[String],
) -> DMSCResult<bool>
pub async fn has_any_permission( &self, user_id: &str, permissions: &[String], ) -> DMSCResult<bool>
Sourcepub async fn has_all_permissions(
&self,
user_id: &str,
permissions: &[String],
) -> DMSCResult<bool>
pub async fn has_all_permissions( &self, user_id: &str, permissions: &[String], ) -> DMSCResult<bool>
Sourcepub async fn get_user_permissions(
&self,
user_id: &str,
) -> DMSCResult<HashSet<String>>
pub async fn get_user_permissions( &self, user_id: &str, ) -> DMSCResult<HashSet<String>>
Sourcepub async fn delete_permission(&self, permission_id: &str) -> DMSCResult<bool>
pub async fn delete_permission(&self, permission_id: &str) -> DMSCResult<bool>
Sourcepub async fn delete_role(&self, role_id: &str) -> DMSCResult<bool>
pub async fn delete_role(&self, role_id: &str) -> DMSCResult<bool>
Sourcepub async fn list_permissions(&self) -> DMSCResult<Vec<DMSCPermission>>
pub async fn list_permissions(&self) -> DMSCResult<Vec<DMSCPermission>>
Sourcepub async fn list_roles(&self) -> DMSCResult<Vec<DMSCRole>>
pub async fn list_roles(&self) -> DMSCResult<Vec<DMSCRole>>
Trait Implementations§
Source§impl Default for DMSCPermissionManager
impl Default for DMSCPermissionManager
Source§impl<'py> IntoPyObject<'py> for DMSCPermissionManager
impl<'py> IntoPyObject<'py> for DMSCPermissionManager
Source§type Target = DMSCPermissionManager
type Target = DMSCPermissionManager
Source§type Output = Bound<'py, <DMSCPermissionManager as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <DMSCPermissionManager as IntoPyObject<'py>>::Target>
Source§fn into_pyobject(
self,
py: Python<'py>,
) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>
Source§impl PyClass for DMSCPermissionManager
impl PyClass for DMSCPermissionManager
Source§impl PyClassImpl for DMSCPermissionManager
impl PyClassImpl for DMSCPermissionManager
Source§const IS_BASETYPE: bool = false
const IS_BASETYPE: bool = false
Source§const IS_SUBCLASS: bool = false
const IS_SUBCLASS: bool = false
Source§const IS_MAPPING: bool = false
const IS_MAPPING: bool = false
Source§const IS_SEQUENCE: bool = false
const IS_SEQUENCE: bool = false
Source§const IS_IMMUTABLE_TYPE: bool = false
const IS_IMMUTABLE_TYPE: bool = false
Source§const RAW_DOC: &'static CStr = /// - Permission checking for users
const RAW_DOC: &'static CStr = /// - Permission checking for users
Source§const DOC: &'static CStr
const DOC: &'static CStr
text_signature if a constructor is defined. Read moreSource§type ThreadChecker = SendablePyClass<DMSCPermissionManager>
type ThreadChecker = SendablePyClass<DMSCPermissionManager>
Source§type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild
Source§type BaseNativeType = PyAny
type BaseNativeType = PyAny
PyAny by default, and when you declare
#[pyclass(extends=PyDict)], it’s PyDict.fn items_iter() -> PyClassItemsIter
fn lazy_type_object() -> &'static LazyTypeObject<Self>
fn dict_offset() -> Option<isize>
fn weaklist_offset() -> Option<isize>
Source§impl PyClassNewTextSignature for DMSCPermissionManager
impl PyClassNewTextSignature for DMSCPermissionManager
const TEXT_SIGNATURE: &'static str = "()"
Source§impl PyMethods<DMSCPermissionManager> for PyClassImplCollector<DMSCPermissionManager>
impl PyMethods<DMSCPermissionManager> for PyClassImplCollector<DMSCPermissionManager>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for DMSCPermissionManager
impl PyTypeInfo for DMSCPermissionManager
Source§fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject
§fn type_object(py: Python<'_>) -> Bound<'_, PyType>
fn type_object(py: Python<'_>) -> Bound<'_, PyType>
§fn is_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type or a subclass of this type.§fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool
object is an instance of this type.impl DerefToPyAny for DMSCPermissionManager
impl ExtractPyClassWithClone for DMSCPermissionManager
Auto Trait Implementations§
impl !Freeze for DMSCPermissionManager
impl !RefUnwindSafe for DMSCPermissionManager
impl Send for DMSCPermissionManager
impl Sync for DMSCPermissionManager
impl Unpin for DMSCPermissionManager
impl UnwindSafe for DMSCPermissionManager
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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>
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§impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
impl<'py, T> IntoPyObjectExt<'py> for Twhere
T: IntoPyObject<'py>,
§fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>
self into an owned Python object, dropping type information.§fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>
self into an owned Python object, dropping type information and unbinding it
from the 'py lifetime.§fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>
self into a Python object. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PyErrArguments for T
impl<T> PyErrArguments for T
§impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
impl<T> PyTypeCheck for Twhere
T: PyTypeInfo,
§const NAME: &'static str = T::NAME
const NAME: &'static str = T::NAME
§fn type_check(object: &Bound<'_, PyAny>) -> bool
fn type_check(object: &Bound<'_, PyAny>) -> bool
§fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>
isinstance and issubclass function. Read more