Хорошо, я усовершенствовал свое регулярное выражение на основе решения, которое вы придумали (которое ошибочно совпадает со строками, начинающимися с «test»).
^((?!foo).)*$
Это регулярное выражение будет соответствовать только строкам, которые не содержат foo. Первый запрос запретит строки, начинающиеся с 'foo', а второй убедится, что foo не найден в других местах строки.
Эта ошибка означает, что ваш метод HasPermission на PermissionService должен быть виртуальным, например:
public virtual bool HasPermission(string name, PermissionType type)
{
// logic
}