pub struct RiPermissionManager { /* 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 RiPermissionManager
impl RiPermissionManager
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 RiPermissionManager
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 RiPermissionManager
pub async fn create_permission(&self, permission: RiPermission) -> RiResult<()>
pub async fn get_permission( &self, permission_id: &str, ) -> RiResult<Option<RiPermission>>
pub async fn create_role(&self, role: RiRole) -> RiResult<()>
pub async fn get_role(&self, role_id: &str) -> RiResult<Option<RiRole>>
pub async fn assign_role_to_user( &self, user_id: String, role_id: String, ) -> RiResult<bool>
pub async fn remove_role_from_user( &self, user_id: &str, role_id: &str, ) -> RiResult<bool>
pub async fn get_user_roles(&self, user_id: &str) -> RiResult<Vec<RiRole>>
pub async fn has_permission( &self, user_id: &str, permission_id: &str, ) -> RiResult<bool>
pub async fn has_any_permission( &self, user_id: &str, permissions: &[String], ) -> RiResult<bool>
pub async fn has_all_permissions( &self, user_id: &str, permissions: &[String], ) -> RiResult<bool>
pub async fn get_user_permissions( &self, user_id: &str, ) -> RiResult<HashSet<String>>
pub async fn delete_permission(&self, permission_id: &str) -> RiResult<bool>
pub async fn delete_role(&self, role_id: &str) -> RiResult<bool>
pub async fn list_permissions(&self) -> RiResult<Vec<RiPermission>>
pub async fn list_roles(&self) -> RiResult<Vec<RiRole>>
Trait Implementations§
Source§impl Default for RiPermissionManager
impl Default for RiPermissionManager
Source§impl<'py> IntoPyObject<'py> for RiPermissionManager
impl<'py> IntoPyObject<'py> for RiPermissionManager
Source§type Target = RiPermissionManager
type Target = RiPermissionManager
Source§type Output = Bound<'py, <RiPermissionManager as IntoPyObject<'py>>::Target>
type Output = Bound<'py, <RiPermissionManager 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 RiPermissionManager
impl PyClass for RiPermissionManager
Source§impl PyClassImpl for RiPermissionManager
impl PyClassImpl for RiPermissionManager
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<RiPermissionManager>
type ThreadChecker = SendablePyClass<RiPermissionManager>
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 RiPermissionManager
impl PyClassNewTextSignature for RiPermissionManager
const TEXT_SIGNATURE: &'static str = "()"
Source§impl PyMethods<RiPermissionManager> for PyClassImplCollector<RiPermissionManager>
impl PyMethods<RiPermissionManager> for PyClassImplCollector<RiPermissionManager>
fn py_methods(self) -> &'static PyClassItems
Source§impl PyTypeInfo for RiPermissionManager
impl PyTypeInfo for RiPermissionManager
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 RiPermissionManager
impl ExtractPyClassWithClone for RiPermissionManager
Auto Trait Implementations§
impl Freeze for RiPermissionManager
impl !RefUnwindSafe for RiPermissionManager
impl Send for RiPermissionManager
impl Sync for RiPermissionManager
impl Unpin for RiPermissionManager
impl UnsafeUnpin for RiPermissionManager
impl !UnwindSafe for RiPermissionManager
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