--- lbbs/include/user_priv.h 2025/05/06 05:31:26 1.2 +++ lbbs/include/user_priv.h 2025/05/30 02:56:02 1.4 @@ -50,6 +50,7 @@ struct user_priv { int sid; int s_priv; + int is_favor; } s_priv_list[BBS_max_section]; int s_count; }; @@ -58,13 +59,39 @@ typedef struct user_priv BBS_user_priv; extern BBS_user_priv BBS_priv; -extern int checklevel(BBS_user_priv *p_priv, int level); - -extern int setpriv(BBS_user_priv *p_priv, int sid, int priv); +// Check whether user level matches any bit in the given param +inline int checklevel(BBS_user_priv *p_priv, int level) +{ + if (level == P_GUEST) + { + return 1; + } -extern int getpriv(BBS_user_priv *p_priv, int sid); + return ((p_priv->level & level) ? 1 : 0); +} -extern int checkpriv(BBS_user_priv *p_priv, int sid, int priv); +// Check whether user level is equal or greater than the given param +inline int checklevel2(BBS_user_priv *p_priv, int level) +{ + return ((p_priv->level >= level) ? 1 : 0); +} + +extern int setpriv(BBS_user_priv *p_priv, int sid, int priv, int is_favor); + +extern int getpriv(BBS_user_priv *p_priv, int sid, int *p_is_favor); + +inline int checkpriv(BBS_user_priv *p_priv, int sid, int priv) +{ + int is_favor = 0; + return (((getpriv(p_priv, sid, &is_favor) & priv)) == priv ? 1 : 0); +} + +inline int is_favor(BBS_user_priv *p_priv, int sid) +{ + int is_favor = 0; + getpriv(p_priv, sid, &is_favor); + return is_favor; +} extern int load_priv(MYSQL *db, BBS_user_priv *p_priv, long int uid);