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    ignore::sa_ignore_impl,
62};
63
64/// 检查登录状态的宏
65#[proc_macro_attribute]
66pub fn sa_check_login(attr: TokenStream, item: TokenStream) -> TokenStream {
67    sa_check_login_impl(attr, item)
68}
69
70/// 检查权限的宏
71#[proc_macro_attribute]
72pub fn sa_check_permission(attr: TokenStream, item: TokenStream) -> TokenStream {
73    sa_check_permission_impl(attr, item)
74}
75
76/// 检查角色的宏
77#[proc_macro_attribute]
78pub fn sa_check_role(attr: TokenStream, item: TokenStream) -> TokenStream {
79    sa_check_role_impl(attr, item)
80}
81
82/// 同时检查多个权限(AND逻辑)
83#[proc_macro_attribute]
84pub fn sa_check_permissions_and(attr: TokenStream, item: TokenStream) -> TokenStream {
85    sa_check_permissions_and_impl(attr, item)
86}
87
88/// 同时检查多个权限(OR逻辑)
89#[proc_macro_attribute]
90pub fn sa_check_permissions_or(attr: TokenStream, item: TokenStream) -> TokenStream {
91    sa_check_permissions_or_impl(attr, item)
92}
93
94/// 同时检查多个角色(AND逻辑)
95#[proc_macro_attribute]
96pub fn sa_check_roles_and(attr: TokenStream, item: TokenStream) -> TokenStream {
97    sa_check_roles_and_impl(attr, item)
98}
99
100/// 同时检查多个角色(OR逻辑)
101#[proc_macro_attribute]
102pub fn sa_check_roles_or(attr: TokenStream, item: TokenStream) -> TokenStream {
103    sa_check_roles_or_impl(attr, item)
104}
105
106/// 忽略认证检查的宏
107#[proc_macro_attribute]
108pub fn sa_ignore(attr: TokenStream, item: TokenStream) -> TokenStream {
109    sa_ignore_impl(attr, item)
110}