You have to create new custom rule for this:
1) In Master db under /sitecore/system/Settings/Rules/Definitions/Elements/Web Forms for Marketers Actions insert new Action item, eg: "Read Value From Contact Facet"
In "Text" field: Use the default value from [Name,,,specific] contact facet
In "Type" field use class from your assembly: Your.Assembly.Rules.ReadValueFromContact,Your.Assembly
2) Implement the ReadValueFromContact class. The simplest version may look like this:
public class ReadValueFromContact<T> : ReadValue<T> where T : ConditionalRuleContext
protected override object GetValue()
private object GetContactData(string facetXpath)
Log.Warn("[ReadValueFromContact]User is not authenticated.", (object)this);
if (Tracker.Current == null || Tracker.Current.Contact == null)
Log.Warn("[ReadValueFromContact]Tracker is empty .", (object)this);
var contact = Tracker.Current.Contact;
string index = facetXpath.Split('/');
IFacet facet = contact.Facets[index];
var name = facetXpath.Remove(0, index.Length + 1);
var prop = facet.GetType().GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
return prop == null ? null : prop.GetValue(facet);
Mind that this will work for simple facets like "Personal/FirstName", or "Personal/Gender" etc, it will not work for more complex ones like eg "Addresses/Entries/StreetLine1", but's it's just a matter of implementing more complex GetContactData method. You already have all required data.
I used reflection to get contact facets by property names, but maybe there easier way to get them.
3) Finally you can now use new Rule in WFFM Form Designer, select the field, then "Rules", "New Condition" and for example something like:
where the current user is a member of the extranet\Registered User role