The PriceParameters object should have all the information you need to retrieve the correct price. You need to note that the User object and Customer object will be NULL for an anonymous user.
The new model is incredibly flexible and I have found it very easy to implement a custom pricing service that is based on price lists such that prices can be based on country, role, or even an individual customer. I use additional tables for storing PriceList definition and PriceListItems which allows me to do something like the following:
if (!string.IsNullOrEmpty(list.PriceListObjectType))
{
// check to see if the list applies to this customer
switch (list.PriceListObjectType.ToLowerCSafe())
{
case "ecommerce.customer":
string fieldName = list.PriceListObjectField;
string fieldValue = list.PriceListObjectValue;
string customerFieldValue = priceParams.Customer.GetValue(fieldName).ToString();
if (fieldValue == customerFieldValue)
{
priceInfo = PriceListItemInfoProvider.GetPriceListItemInfo(sku.SKUID, list.PriceListID, currencyId);
}
break;
}
}
The above is just an example to give you an idea, however, you do need to consider the impact on the site if doing lots of these lookups.