More work on aqhome-cgi.
This commit is contained in:
@@ -44,6 +44,8 @@ GWEN_INHERIT(AQH_MODULE, AQH_MOD_SERVICE)
|
||||
*/
|
||||
|
||||
static void GWENHYWFAR_CB _freeData(void *bp, void *p);
|
||||
static void _calcUserModPerms(AQH_MODULE *m, const AQH_USER *user);
|
||||
static uint32_t _calcRolePerms(const AQH_MODULE *m, const AQH_MODULE_PERMS *modPerms);
|
||||
|
||||
|
||||
|
||||
@@ -106,6 +108,21 @@ const char *AQH_ModService_GetBaseFolder(const AQH_MODULE *m)
|
||||
|
||||
|
||||
|
||||
uint32_t AQH_ModService_GetUserPerms(const AQH_MODULE *m)
|
||||
{
|
||||
if (m) {
|
||||
AQH_MOD_SERVICE *xm;
|
||||
|
||||
xm=GWEN_INHERIT_GETDATA(AQH_MODULE, AQH_MOD_SERVICE, m);
|
||||
if (xm) {
|
||||
return xm->userPerms;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_ModService_SetHandleRequestFn(AQH_MODULE *m, AQH_MODSERVICE_HANDLEREQUEST_FN fn)
|
||||
{
|
||||
if (m) {
|
||||
@@ -252,8 +269,14 @@ AQH_MODULE *AQH_ModService_LoadSubModule(AQH_MODULE *m, AQCGI_REQUEST *rq, AQH_S
|
||||
AQH_MOD_SERVICE *xm;
|
||||
|
||||
xm=GWEN_INHERIT_GETDATA(AQH_MODULE, AQH_MOD_SERVICE, m);
|
||||
if (xm && xm->loadSubModuleFn)
|
||||
return xm->loadSubModuleFn(m, rq, session, sModuleName);
|
||||
if (xm && xm->loadSubModuleFn) {
|
||||
AQH_MODULE *mReturn;
|
||||
|
||||
mReturn=xm->loadSubModuleFn(m, rq, session, sModuleName);
|
||||
if (mReturn)
|
||||
AQH_ModService_CalcSessionModPerms(mReturn, session);
|
||||
return mReturn;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
@@ -323,6 +346,9 @@ AQH_SESSION *AQH_ModService_ReadSession(AQH_MODULE *m, AQCGI_REQUEST *rq)
|
||||
AQH_Session_free(session);
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
DBG_ERROR(NULL, "User is \"%s\"", sUserName);
|
||||
}
|
||||
AQH_Session_SetUser(session, user);
|
||||
}
|
||||
return session;
|
||||
@@ -336,6 +362,115 @@ AQH_SESSION *AQH_ModService_ReadSession(AQH_MODULE *m, AQCGI_REQUEST *rq)
|
||||
|
||||
|
||||
|
||||
void AQH_ModService_CalcSessionModPerms(AQH_MODULE *m, const AQH_SESSION *session)
|
||||
{
|
||||
const AQH_USER *user;
|
||||
|
||||
user=session?AQH_Session_GetUser(session):NULL;
|
||||
_calcUserModPerms(m, user);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void _calcUserModPerms(AQH_MODULE *m, const AQH_USER *user)
|
||||
{
|
||||
if (m) {
|
||||
AQH_MOD_SERVICE *xm;
|
||||
|
||||
xm=GWEN_INHERIT_GETDATA(AQH_MODULE, AQH_MOD_SERVICE, m);
|
||||
if (xm) {
|
||||
uint32_t perms=0;
|
||||
|
||||
if (user) {
|
||||
if (AQH_User_GetFlags(user) & AQH_USER_FLAGS_ADMIN)
|
||||
perms=0xffffffff;
|
||||
else {
|
||||
const char *sModName;
|
||||
const AQH_MODULE_PERMS_LIST *modPermsList;
|
||||
AQH_MODULE_PERMS *modPerms;
|
||||
|
||||
sModName=AQH_Module_GetName(m);
|
||||
modPermsList=AQH_User_GetModulePermList(user);
|
||||
modPerms=(sModName && modPermsList)?AQH_ModulePerms_List_GetByModuleId(modPermsList, sModName):NULL;
|
||||
if (modPerms)
|
||||
perms=_calcRolePerms(m, modPerms);
|
||||
else
|
||||
perms=AQH_Module_GetGuestPerms(m);
|
||||
}
|
||||
} /* if (user) */
|
||||
else
|
||||
perms=AQH_Module_GetGuestPerms(m);
|
||||
xm->userPerms=perms;
|
||||
}
|
||||
} /* if (m) */
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint32_t _calcRolePerms(const AQH_MODULE *m, const AQH_MODULE_PERMS *modPerms)
|
||||
{
|
||||
uint32_t perms=0;
|
||||
const AQH_ROLE_LIST *roleList;
|
||||
|
||||
roleList=AQH_Module_GetRoleList(m);
|
||||
if (roleList) {
|
||||
int roleArraySize;
|
||||
int i;
|
||||
uint32_t explAddPerms=0;
|
||||
uint32_t explDelPerms=0;
|
||||
|
||||
roleArraySize=AQH_ModulePerms_GetRoleArrayArraySize();
|
||||
for (i=0; i<roleArraySize; i++) {
|
||||
int roleId;
|
||||
|
||||
roleId=AQH_ModulePerms_GetRoleArrayAt(modPerms, i);
|
||||
if (roleId) {
|
||||
const AQH_ROLE *role;
|
||||
|
||||
role=AQH_Role_List_GetById(roleList, roleId);
|
||||
if (role) {
|
||||
perms|=AQH_Role_GetPerms(role);
|
||||
explAddPerms|=AQH_Role_GetExplAddPerms(role);
|
||||
explAddPerms|=AQH_Role_GetExplDelPerms(role);
|
||||
}
|
||||
}
|
||||
} /* for */
|
||||
/* collate permissions */
|
||||
perms|=explAddPerms;
|
||||
perms|=AQH_ModulePerms_GetExplAddPerms(modPerms);
|
||||
perms&=~explDelPerms;
|
||||
perms&=~AQH_ModulePerms_GetExplDelPerms(modPerms);
|
||||
}
|
||||
return perms;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void AQH_ModService_AddPermDef(AQH_PERMDEF_LIST *permDefList, const char *id, uint32_t mask, const char *descr)
|
||||
{
|
||||
AQH_PERMDEF *permDef;
|
||||
|
||||
permDef=AQH_PermDef_new();
|
||||
AQH_PermDef_SetId(permDef, id);
|
||||
AQH_PermDef_SetMask(permDef, mask);
|
||||
AQH_PermDef_SetDescr(permDef, descr);
|
||||
AQH_PermDef_List_Add(permDef, permDefList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void AQH_ModService_AddRole(AQH_ROLE_LIST *roleList, int id, const char *name, uint32_t perms, const char *descr)
|
||||
{
|
||||
AQH_ROLE *role;
|
||||
|
||||
role=AQH_Role_new();
|
||||
AQH_Role_SetId(role, id);
|
||||
AQH_Role_SetName(role, name);
|
||||
AQH_Role_SetPerms(role, perms);
|
||||
AQH_Role_SetDescr(role, descr);
|
||||
AQH_Role_List_Add(role, roleList);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user