void UserGroup::AddMember(const User::Ptr& user) { user->AddGroup(GetName()); boost::mutex::scoped_lock lock(m_UserGroupMutex); m_Members.insert(user); }
bool UserGroup::EvaluateObjectRuleOne(const User::Ptr user, const ObjectRule& rule) { DebugInfo di = rule.GetDebugInfo(); std::ostringstream msgbuf; msgbuf << "Evaluating 'object' rule (" << di << ")"; CONTEXT(msgbuf.str()); Dictionary::Ptr locals = make_shared<Dictionary>(); locals->Set("user", user); if (!rule.EvaluateFilter(locals)) return false; std::ostringstream msgbuf2; msgbuf2 << "Assigning membership for group '" << rule.GetName() << "' to user '" << user->GetName() << "' for rule " << di; Log(LogDebug, "UserGroup", msgbuf2.str()); String group_name = rule.GetName(); UserGroup::Ptr group = UserGroup::GetByName(group_name); if (!group) { Log(LogCritical, "UserGroup", "Invalid membership assignment. Group '" + group_name + "' does not exist."); return false; } /* assign user group membership */ group->ResolveGroupMembership(user, true); /* update groups attribute for apply */ user->AddGroup(group_name); return true; }