Skip to main content

sa_token_macro/
lib.rs

1// Author: 金书记
2//
3//! # sa-token-macro
4//! 
5//! sa-token-rust的过程宏
6//! 
7//! 提供类似Java注解的功能:
8//! - `#[sa_check_login]` - 检查登录
9//! - `#[sa_check_permission("permission")]` - 检查权限
10//! - `#[sa_check_role("role")]` - 检查角色
11//! - `#[sa_ignore]` - 忽略认证(跳过所有认证检查)
12//! 
13//! ## 使用示例
14//! 
15//! ```rust,ignore
16//! use sa_token_macro::*;
17//! 
18//! #[sa_check_login]
19//! async fn user_info() -> impl Responder {
20//!     // 自动验证登录,未登录会返回401
21//!     "User info"
22//! }
23//! 
24//! #[sa_check_permission("user:delete")]
25//! async fn delete_user(id: u64) -> impl Responder {
26//!     // 自动验证权限,无权限会返回403
27//!     "User deleted"
28//! }
29//! 
30//! #[sa_check_role("admin")]
31//! async fn admin_panel() -> impl Responder {
32//!     // 自动验证角色,无角色会返回403
33//!     "Admin panel"
34//! }
35//! 
36//! #[sa_ignore]
37//! async fn public_api() -> impl Responder {
38//!     // 此接口不需要任何认证
39//!     "Public API"
40//! }
41//! 
42//! // 也可以用在结构体上,表示整个控制器都忽略认证
43//! #[sa_ignore]
44//! struct PublicController;
45//! ```
46
47use proc_macro::TokenStream;
48
49mod macros;
50mod utils;
51
52// 导出所有宏的实现
53use macros::{
54    check_login::sa_check_login_impl,
55    check_permission::sa_check_permission_impl,
56    check_role::sa_check_role_impl,
57    check_permissions_and::sa_check_permissions_and_impl,
58    check_permissions_or::sa_check_permissions_or_impl,
59    check_roles_and::sa_check_roles_and_impl,
60    check_roles_or::sa_check_roles_or_impl,
61    check_safe::sa_check_safe_impl,
62    check_disable::sa_check_disable_impl,
63    check_or::sa_check_or_impl,
64    ignore::sa_ignore_impl,
65};
66
67/// 检查登录状态的宏
68#[proc_macro_attribute]
69pub fn sa_check_login(attr: TokenStream, item: TokenStream) -> TokenStream {
70    sa_check_login_impl(attr, item)
71}
72
73/// 检查权限的宏
74#[proc_macro_attribute]
75pub fn sa_check_permission(attr: TokenStream, item: TokenStream) -> TokenStream {
76    sa_check_permission_impl(attr, item)
77}
78
79/// 检查角色的宏
80#[proc_macro_attribute]
81pub fn sa_check_role(attr: TokenStream, item: TokenStream) -> TokenStream {
82    sa_check_role_impl(attr, item)
83}
84
85/// 同时检查多个权限(AND逻辑)
86#[proc_macro_attribute]
87pub fn sa_check_permissions_and(attr: TokenStream, item: TokenStream) -> TokenStream {
88    sa_check_permissions_and_impl(attr, item)
89}
90
91/// 同时检查多个权限(OR逻辑)
92#[proc_macro_attribute]
93pub fn sa_check_permissions_or(attr: TokenStream, item: TokenStream) -> TokenStream {
94    sa_check_permissions_or_impl(attr, item)
95}
96
97/// 同时检查多个角色(AND逻辑)
98#[proc_macro_attribute]
99pub fn sa_check_roles_and(attr: TokenStream, item: TokenStream) -> TokenStream {
100    sa_check_roles_and_impl(attr, item)
101}
102
103/// 同时检查多个角色(OR逻辑)
104#[proc_macro_attribute]
105pub fn sa_check_roles_or(attr: TokenStream, item: TokenStream) -> TokenStream {
106    sa_check_roles_or_impl(attr, item)
107}
108
109/// 忽略认证检查的宏
110#[proc_macro_attribute]
111pub fn sa_ignore(attr: TokenStream, item: TokenStream) -> TokenStream {
112    sa_ignore_impl(attr, item)
113}
114
115/// 检查二级认证
116#[proc_macro_attribute]
117pub fn sa_check_safe(attr: TokenStream, item: TokenStream) -> TokenStream {
118    sa_check_safe_impl(attr, item)
119}
120
121/// 检查账号封禁
122#[proc_macro_attribute]
123pub fn sa_check_disable(attr: TokenStream, item: TokenStream) -> TokenStream {
124    sa_check_disable_impl(attr, item)
125}
126
127/// 组合鉴权(OR):任一子检查通过即可
128#[proc_macro_attribute]
129pub fn sa_check_or(attr: TokenStream, item: TokenStream) -> TokenStream {
130    sa_check_or_impl(attr, item)
131}