11use serde:: { Deserialize , Serialize } ;
2- use std:: ops:: BitOr ;
32use strum:: EnumIter ;
43
54use sea_orm:: prelude:: * ;
@@ -18,7 +17,7 @@ pub enum HiddenFlag {
1817 Spy = 2 ,
1918 /// 彩蛋
2019 #[ sea_orm( num_value = 3 ) ]
21- Superise = 3 ,
20+ Suprise = 3 ,
2221}
2322
2423#[ derive(
@@ -155,91 +154,33 @@ pub enum SystemActionLogAction {
155154#[ sea_orm( rs_type = "i32" , db_type = "Integer" ) ]
156155pub enum SystemUserRole {
157156 /// 系统管理员
158- Admin = 2 ,
157+ Admin = 0 ,
159158 /// 地图管理员
160- MapManager = 3 ,
159+ MapManager = 1 ,
161160 /// 测试打点员
162- MapNeigui = 4 ,
161+ MapNeigui = 2 ,
163162 /// 地图打点员
164- MapPunctuate = 5 ,
163+ MapPunctuate = 3 ,
165164 /// 地图用户
166- MapUser = 6 ,
165+ MapUser = 4 ,
167166 /// 匿名用户
168- Visitor = 100 ,
167+ Visitor = 5 ,
169168}
170169
171- impl From < i32 > for SystemUserRole {
172- fn from ( v : i32 ) -> Self {
173- match v {
174- 2 => SystemUserRole :: Admin ,
175- 3 => SystemUserRole :: MapManager ,
176- 4 => SystemUserRole :: MapNeigui ,
177- 5 => SystemUserRole :: MapPunctuate ,
178- 6 => SystemUserRole :: MapUser ,
179- 100 => SystemUserRole :: Visitor ,
180- x if x < 2 => SystemUserRole :: Admin ,
181- _ => SystemUserRole :: Visitor ,
170+ impl SystemUserRole {
171+ fn is_available ( self , flag : HiddenFlag ) -> bool {
172+ if matches ! ( flag, HiddenFlag :: Visible | HiddenFlag :: Suprise ) {
173+ return true ;
182174 }
183- }
184- }
185-
186- /// `HiddenFlag` 的掩码枚举,从低到高分别分配一个二进制位,用于配合权限等级的掩码计算
187- #[ derive( Debug , Clone , Copy , PartialEq , Serialize , Deserialize , EnumIter ) ]
188- #[ repr( u8 ) ]
189- pub enum HiddenFlagMask {
190- Visible = 1 << 0 ,
191- Hidden = 1 << 1 ,
192- Spy = 1 << 2 ,
193- Superise = 1 << 3 ,
194- }
195-
196- impl BitOr for HiddenFlagMask {
197- type Output = u8 ;
198-
199- fn bitor ( self , rhs : Self ) -> Self :: Output {
200- ( self as u8 ) | ( rhs as u8 )
201- }
202- }
203-
204- impl BitOr < u8 > for HiddenFlagMask {
205- type Output = u8 ;
206-
207- fn bitor ( self , rhs : u8 ) -> Self :: Output {
208- ( self as u8 ) | rhs
209- }
210- }
211-
212- impl BitOr < HiddenFlagMask > for u8 {
213- type Output = u8 ;
214-
215- fn bitor ( self , rhs : HiddenFlagMask ) -> Self :: Output {
216- self | ( rhs as u8 )
217- }
218- }
219175
220- impl Into < u8 > for SystemUserRole {
221- fn into ( self ) -> u8 {
222176 match self {
223- SystemUserRole :: Admin => {
224- HiddenFlagMask :: Visible
225- | HiddenFlagMask :: Hidden
226- | HiddenFlagMask :: Spy
227- | HiddenFlagMask :: Superise
228- } // 1|2|4|8 = 15
229- SystemUserRole :: MapManager => {
230- HiddenFlagMask :: Visible | HiddenFlagMask :: Hidden | HiddenFlagMask :: Superise
231- } // 1|2|8 = 11
232- SystemUserRole :: MapNeigui => {
233- HiddenFlagMask :: Visible
234- | HiddenFlagMask :: Hidden
235- | HiddenFlagMask :: Spy
236- | HiddenFlagMask :: Superise
237- } // 1|2|4|8 = 15
238- SystemUserRole :: MapPunctuate => {
239- HiddenFlagMask :: Visible | HiddenFlagMask :: Hidden | HiddenFlagMask :: Superise
240- } // 1|2|8 = 11
241- SystemUserRole :: MapUser => HiddenFlagMask :: Visible | HiddenFlagMask :: Superise , // 1|8 = 9
242- SystemUserRole :: Visitor => HiddenFlagMask :: Visible | HiddenFlagMask :: Superise , // 1|8 = 9
177+ SystemUserRole :: Admin | SystemUserRole :: MapNeigui => {
178+ matches ! ( flag, HiddenFlag :: Hidden | HiddenFlag :: Spy )
179+ }
180+ SystemUserRole :: MapManager | SystemUserRole :: MapPunctuate => {
181+ matches ! ( flag, HiddenFlag :: Hidden )
182+ }
183+ SystemUserRole :: MapUser | SystemUserRole :: Visitor => false ,
243184 }
244185 }
245186}
0 commit comments