Я не знаю, каково ваше точное исключение, но вы можете попробовать внести следующие изменения:
Вместо
SPUser spUser = web.AllUsers [имя_пользователя];
использовать (это обеспечит существование пользователя в сети)
SPUser spUser = web.EnsureUser(userName);
Вместо
SPGroup spGroup = web.Groups [groupName];
use (Коллекция групп содержит только группы, определенные на текущем подпрограммепаутина)
SPGroup spGroup = web.SiteGroups[groupName];
Нет необходимости проверять (spGroup! = Null), потому что если группа не найдена, всегда будет выдано исключение.