--- lbbs/include/user_priv.h 2025/05/06 05:31:26 1.2 +++ lbbs/include/user_priv.h 2025/06/03 05:33:06 1.5 @@ -18,7 +18,7 @@ #define _USER_PRIV_H_ #include "bbs.h" -#include +#include // User privilege #define S_NONE 0x0 @@ -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); +// 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; + } + + return ((p_priv->level & level) ? 1 : 0); +} + +// 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 setpriv(BBS_user_priv *p_priv, int sid, int priv); +extern int getpriv(BBS_user_priv *p_priv, int sid, int *p_is_favor); -extern int getpriv(BBS_user_priv *p_priv, int sid); +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); +} -extern int checkpriv(BBS_user_priv *p_priv, int sid, int priv); +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);