pub struct SaTokenManager {
pub config: SaTokenConfig,
/* private fields */
}Expand description
sa-token 管理器
Fields§
§config: SaTokenConfig配置信息
Implementations§
Source§impl SaTokenManager
impl SaTokenManager
Sourcepub async fn disable_level(
&self,
login_id: &str,
service: &str,
level: i32,
time: i64,
) -> Result<(), SaTokenError>
pub async fn disable_level( &self, login_id: &str, service: &str, level: i32, time: i64, ) -> Result<(), SaTokenError>
封禁指定账号的指定服务及等级
time 单位为秒,-1 表示永久封禁。
Sourcepub async fn disable(
&self,
login_id: &str,
time: i64,
) -> Result<(), SaTokenError>
pub async fn disable( &self, login_id: &str, time: i64, ) -> Result<(), SaTokenError>
封禁指定账号(默认服务 login、默认等级)
Sourcepub async fn get_disable_level(
&self,
login_id: &str,
service: &str,
) -> Result<i32, SaTokenError>
pub async fn get_disable_level( &self, login_id: &str, service: &str, ) -> Result<i32, SaTokenError>
获取封禁等级;未封禁返回 NOT_DISABLE_LEVEL
Sourcepub async fn is_disable_level(
&self,
login_id: &str,
service: &str,
level: i32,
) -> Result<bool, SaTokenError>
pub async fn is_disable_level( &self, login_id: &str, service: &str, level: i32, ) -> Result<bool, SaTokenError>
是否已被封禁到指定等级(含更高等级)
Sourcepub async fn check_disable_level(
&self,
login_id: &str,
service: &str,
level: i32,
) -> Result<(), SaTokenError>
pub async fn check_disable_level( &self, login_id: &str, service: &str, level: i32, ) -> Result<(), SaTokenError>
校验封禁;若等级达到阈值则抛出 SaTokenError::DisableService
Sourcepub async fn check_disable_services(
&self,
login_id: &str,
services: &[&str],
level: i32,
) -> Result<(), SaTokenError>
pub async fn check_disable_services( &self, login_id: &str, services: &[&str], level: i32, ) -> Result<(), SaTokenError>
校验多个服务的封禁(全部通过才算通过)
Sourcepub async fn untie_disable(
&self,
login_id: &str,
service: &str,
) -> Result<(), SaTokenError>
pub async fn untie_disable( &self, login_id: &str, service: &str, ) -> Result<(), SaTokenError>
解封指定服务
Source§impl SaTokenManager
impl SaTokenManager
Sourcepub async fn open_safe(
&self,
token: &TokenValue,
service: &str,
safe_time: i64,
) -> Result<(), SaTokenError>
pub async fn open_safe( &self, token: &TokenValue, service: &str, safe_time: i64, ) -> Result<(), SaTokenError>
为指定 token 开启二级认证
Sourcepub async fn is_safe(
&self,
token: &TokenValue,
service: &str,
) -> Result<bool, SaTokenError>
pub async fn is_safe( &self, token: &TokenValue, service: &str, ) -> Result<bool, SaTokenError>
判断 token 是否已通过指定业务的二级认证
Sourcepub async fn check_safe(
&self,
token: &TokenValue,
service: &str,
) -> Result<(), SaTokenError>
pub async fn check_safe( &self, token: &TokenValue, service: &str, ) -> Result<(), SaTokenError>
校验二级认证;未通过抛出 SaTokenError::NotSafe
Sourcepub async fn close_safe(
&self,
token: &TokenValue,
service: &str,
) -> Result<(), SaTokenError>
pub async fn close_safe( &self, token: &TokenValue, service: &str, ) -> Result<(), SaTokenError>
关闭二级认证
Sourcepub async fn get_safe_time(
&self,
token: &TokenValue,
service: &str,
) -> Result<Option<i64>, SaTokenError>
pub async fn get_safe_time( &self, token: &TokenValue, service: &str, ) -> Result<Option<i64>, SaTokenError>
获取二级认证剩余有效时间(秒);未认证返回 None
Source§impl SaTokenManager
impl SaTokenManager
Sourcepub async fn get_token_session(
&self,
token: &TokenValue,
) -> Result<SaSession, SaTokenError>
pub async fn get_token_session( &self, token: &TokenValue, ) -> Result<SaSession, SaTokenError>
获取 Token-Session(不存在时按配置创建)
Sourcepub async fn get_anon_token_session(
&self,
token: &TokenValue,
) -> Result<SaSession, SaTokenError>
pub async fn get_anon_token_session( &self, token: &TokenValue, ) -> Result<SaSession, SaTokenError>
匿名 Token-Session(不校验登录)
pub async fn save_token_session( &self, token: &TokenValue, session: &SaSession, ) -> Result<(), SaTokenError>
pub async fn delete_token_session( &self, token: &TokenValue, ) -> Result<(), SaTokenError>
Source§impl SaTokenManager
impl SaTokenManager
Sourcepub fn new(storage: Arc<dyn SaStorage>, config: SaTokenConfig) -> SaTokenManager
pub fn new(storage: Arc<dyn SaStorage>, config: SaTokenConfig) -> SaTokenManager
创建新的管理器实例
pub fn with_stp_interface(self, iface: Arc<dyn StpInterface>) -> SaTokenManager
pub fn with_online_manager(self, manager: Arc<OnlineManager>) -> SaTokenManager
pub fn with_distributed_manager( self, manager: Arc<DistributedSessionManager>, ) -> SaTokenManager
pub fn online_manager(&self) -> Option<&Arc<OnlineManager>>
pub fn distributed_manager(&self) -> Option<&Arc<DistributedSessionManager>>
Sourcepub fn event_bus(&self) -> &SaTokenEventBus
pub fn event_bus(&self) -> &SaTokenEventBus
获取事件总线的引用
Sourcepub async fn login(
&self,
login_id: impl Into<String>,
) -> Result<TokenValue, SaTokenError>
pub async fn login( &self, login_id: impl Into<String>, ) -> Result<TokenValue, SaTokenError>
登录:为指定账号创建 token
Sourcepub async fn login_with_options(
&self,
login_id: impl Into<String>,
login_type: Option<String>,
device: Option<String>,
extra_data: Option<Value>,
nonce: Option<String>,
expire_time: Option<DateTime<Utc>>,
) -> Result<TokenValue, SaTokenError>
pub async fn login_with_options( &self, login_id: impl Into<String>, login_type: Option<String>, device: Option<String>, extra_data: Option<Value>, nonce: Option<String>, expire_time: Option<DateTime<Utc>>, ) -> Result<TokenValue, SaTokenError>
登录:为指定账号创建 token(支持自定义 TokenInfo 字段)
§参数 | Parameters
login_id- 登录用户 ID | Login user IDlogin_type- 登录类型(如 “user”, “admin”)| Login type (e.g., “user”, “admin”)device- 设备标识 | Device identifierextra_data- 额外数据 | Extra datanonce- 防重放攻击的一次性令牌 | One-time token for replay attack preventionexpire_time- 自定义过期时间(如果为 None,则使用配置的过期时间)| Custom expiration time (if None, use configured timeout)
§示例 | Example
let token = manager.login_with_options(
"user_123",
Some("admin".to_string()),
Some("iPhone".to_string()),
Some(json!({"ip": "192.168.1.1"})),
Some("nonce_123".to_string()),
None,
).await?;Sourcepub async fn login_with_token_info(
&self,
token_info: TokenInfo,
) -> Result<TokenValue, SaTokenError>
pub async fn login_with_token_info( &self, token_info: TokenInfo, ) -> Result<TokenValue, SaTokenError>
登录:使用完整的 TokenInfo 对象创建 token
§参数 | Parameters
token_info- 完整的 TokenInfo 对象,包含所有 token 信息 | Complete TokenInfo object containing all token information
§说明 | Notes
- TokenInfo 中的
token字段将被使用(如果已设置),否则会自动生成 - TokenInfo 中的
login_id字段必须设置 - 如果
expire_time为 None,将使用配置的过期时间 - The
tokenfield in TokenInfo will be used (if set), otherwise will be auto-generated - The
login_idfield in TokenInfo must be set - If
expire_timeis None, will use configured timeout
§示例 | Example
use sa_token_core::token::{TokenInfo, TokenValue};
use chrono::Utc;
let mut token_info = TokenInfo::new(
TokenValue::new("custom_token_123"),
"user_123"
);
token_info.login_type = "admin".to_string();
token_info.device = Some("iPhone".to_string());
token_info.extra_data = Some(json!({"ip": "192.168.1.1"}));
let token = manager.login_with_token_info(token_info).await?;Sourcepub async fn logout(&self, token: &TokenValue) -> Result<(), SaTokenError>
pub async fn logout(&self, token: &TokenValue) -> Result<(), SaTokenError>
登出:删除指定 token(LOGOUT 模式)
Sourcepub async fn kick_out_by_token(
&self,
token: &TokenValue,
) -> Result<(), SaTokenError>
pub async fn kick_out_by_token( &self, token: &TokenValue, ) -> Result<(), SaTokenError>
踢人下线(KICKOUT 模式:保留映射标记 -5)
Sourcepub async fn replaced_by_token(
&self,
token: &TokenValue,
) -> Result<(), SaTokenError>
pub async fn replaced_by_token( &self, token: &TokenValue, ) -> Result<(), SaTokenError>
顶号下线(REPLACED 模式:保留映射标记 -4)
Sourcepub async fn logout_by_login_id(
&self,
login_id: &str,
) -> Result<(), SaTokenError>
pub async fn logout_by_login_id( &self, login_id: &str, ) -> Result<(), SaTokenError>
根据登录 ID 登出所有 token
Sourcepub async fn get_token_info(
&self,
token: &TokenValue,
) -> Result<TokenInfo, SaTokenError>
pub async fn get_token_info( &self, token: &TokenValue, ) -> Result<TokenInfo, SaTokenError>
获取 token 信息
Sourcepub async fn is_valid(&self, token: &TokenValue) -> bool
pub async fn is_valid(&self, token: &TokenValue) -> bool
检查 token 是否有效
Sourcepub async fn get_session(
&self,
login_id: &str,
) -> Result<SaSession, SaTokenError>
pub async fn get_session( &self, login_id: &str, ) -> Result<SaSession, SaTokenError>
获取 session
Sourcepub async fn save_session(
&self,
session: &SaSession,
) -> Result<(), SaTokenError>
pub async fn save_session( &self, session: &SaSession, ) -> Result<(), SaTokenError>
保存 session
Sourcepub async fn delete_session(&self, login_id: &str) -> Result<(), SaTokenError>
pub async fn delete_session(&self, login_id: &str) -> Result<(), SaTokenError>
删除 session
Sourcepub async fn renew_timeout(
&self,
token: &TokenValue,
timeout_seconds: i64,
) -> Result<(), SaTokenError>
pub async fn renew_timeout( &self, token: &TokenValue, timeout_seconds: i64, ) -> Result<(), SaTokenError>
续期 token(重置过期时间)
Sourcepub async fn kick_out(&self, login_id: &str) -> Result<(), SaTokenError>
pub async fn kick_out(&self, login_id: &str) -> Result<(), SaTokenError>
踢人下线(按 login_id,对该账号所有 token 执行 KICKOUT)
Sourcepub async fn get_terminal_list(
&self,
login_type: &str,
login_id: &str,
device_type: Option<&str>,
) -> Result<Vec<SaTerminalInfo>, SaTokenError>
pub async fn get_terminal_list( &self, login_type: &str, login_id: &str, device_type: Option<&str>, ) -> Result<Vec<SaTerminalInfo>, SaTokenError>
获取指定账号已登录设备终端列表
Sourcepub async fn get_token_value_list_by_login_id(
&self,
login_type: &str,
login_id: &str,
device_type: Option<&str>,
) -> Result<Vec<String>, SaTokenError>
pub async fn get_token_value_list_by_login_id( &self, login_type: &str, login_id: &str, device_type: Option<&str>, ) -> Result<Vec<String>, SaTokenError>
获取指定账号的 token 列表(来自终端列表)
Sourcepub async fn get_terminal_info_by_token(
&self,
token: &TokenValue,
) -> Result<Option<SaTerminalInfo>, SaTokenError>
pub async fn get_terminal_info_by_token( &self, token: &TokenValue, ) -> Result<Option<SaTerminalInfo>, SaTokenError>
按 token 反查终端信息
Source§impl SaTokenManager
impl SaTokenManager
pub async fn get_permissions_with_type( &self, login_type: &str, login_id: &str, ) -> Result<Vec<String>, SaTokenError>
pub async fn set_permissions_with_type( &self, login_type: &str, login_id: &str, permissions: Vec<String>, ) -> Result<(), SaTokenError>
pub async fn get_roles_with_type( &self, login_type: &str, login_id: &str, ) -> Result<Vec<String>, SaTokenError>
pub async fn set_roles_with_type( &self, login_type: &str, login_id: &str, roles: Vec<String>, ) -> Result<(), SaTokenError>
Sourcepub async fn set_permissions(
&self,
login_id: &str,
permissions: Vec<String>,
) -> Result<(), SaTokenError>
pub async fn set_permissions( &self, login_id: &str, permissions: Vec<String>, ) -> Result<(), SaTokenError>
覆盖设置用户权限列表 会完全替换该用户的所有权限
Sourcepub async fn get_permissions(
&self,
login_id: &str,
) -> Result<Vec<String>, SaTokenError>
pub async fn get_permissions( &self, login_id: &str, ) -> Result<Vec<String>, SaTokenError>
获取用户全部权限列表 用户不存在或无权限时返回空列表
Sourcepub async fn add_permission(
&self,
login_id: &str,
permission: String,
) -> Result<(), SaTokenError>
pub async fn add_permission( &self, login_id: &str, permission: String, ) -> Result<(), SaTokenError>
追加单个权限(已存在则跳过,避免重复) 采用读-改-写模式,分布式高并发下存在竞态风险
Sourcepub async fn remove_permission(
&self,
login_id: &str,
permission: &str,
) -> Result<(), SaTokenError>
pub async fn remove_permission( &self, login_id: &str, permission: &str, ) -> Result<(), SaTokenError>
移除用户的某个权限 不存在时无操作,仅在确实删除了元素时才回写存储
Sourcepub async fn clear_permissions(
&self,
login_id: &str,
) -> Result<(), SaTokenError>
pub async fn clear_permissions( &self, login_id: &str, ) -> Result<(), SaTokenError>
清除用户的全部权限 直接删除对应存储键
Sourcepub async fn set_roles(
&self,
login_id: &str,
roles: Vec<String>,
) -> Result<(), SaTokenError>
pub async fn set_roles( &self, login_id: &str, roles: Vec<String>, ) -> Result<(), SaTokenError>
覆盖设置用户角色列表 会完全替换该用户的所有角色
Sourcepub async fn get_roles(
&self,
login_id: &str,
) -> Result<Vec<String>, SaTokenError>
pub async fn get_roles( &self, login_id: &str, ) -> Result<Vec<String>, SaTokenError>
获取用户全部角色列表 用户不存在或无角色时返回空列表
Sourcepub async fn add_role(
&self,
login_id: &str,
role: String,
) -> Result<(), SaTokenError>
pub async fn add_role( &self, login_id: &str, role: String, ) -> Result<(), SaTokenError>
追加单个角色(已存在则跳过,避免重复) 采用读-改-写模式,分布式高并发下存在竞态风险
Sourcepub async fn remove_role(
&self,
login_id: &str,
role: &str,
) -> Result<(), SaTokenError>
pub async fn remove_role( &self, login_id: &str, role: &str, ) -> Result<(), SaTokenError>
移除用户的某个角色 不存在时无操作,仅在确实删除了元素时才回写存储
Sourcepub async fn clear_roles(&self, login_id: &str) -> Result<(), SaTokenError>
pub async fn clear_roles(&self, login_id: &str) -> Result<(), SaTokenError>
清除用户的全部角色 直接删除对应存储键
Trait Implementations§
Source§impl Clone for SaTokenManager
impl Clone for SaTokenManager
Source§fn clone(&self) -> SaTokenManager
fn clone(&self) -> SaTokenManager
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl !RefUnwindSafe for SaTokenManager
impl !UnwindSafe for SaTokenManager
impl Freeze for SaTokenManager
impl Send for SaTokenManager
impl Sync for SaTokenManager
impl Unpin for SaTokenManager
impl UnsafeUnpin for SaTokenManager
Blanket Implementations§
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
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> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);