|
WFTK_EXPORT int wftk_role_list (XML * session, XML * datasheet, XML * list)
{
int count = 0;
XML * mark;
XML_ATTR * attr;
if (!list) return 0;
mark = xml_firstelem (datasheet);
while (mark) {
if (xml_is (mark, "role")) {
xml_append (list, xml_copy (mark));
count++;
}
mark = xml_nextelem (mark);
}
xml_setnum (list, "count", count);
return count;
}
WFTK_EXPORT const char * wftk_role_user (XML * session, XML * datasheet, const char * role)
{
XML * mark;
if (!role) return "";
mark = xml_locf (datasheet, ".role[%s]", role);
if (mark) return (xml_attrval (mark, "user"));
return "";
}
WFTK_EXPORT int wftk_role_assign (XML * session, XML * datasheet, const char * role, const char * userid)
{
XML * mark;
if (!role || !userid) return 0;
if (*userid) wftk_user_retrieve (session, datasheet, userid);
/* TODO: reassign existing role-based tasks based on new role assignment. */
mark = xml_locf (datasheet, ".role[%s]", role);
if (mark) {
xml_set (mark, "user", userid);
return 1;
}
mark = xml_create ("role");
xml_set (mark, "id", role);
xml_set (mark, "user", userid);
xml_append_pretty (datasheet, mark);
return 1;
}
|