Avoid user to multiple purchase of same product
The best way to do this would be to use the method (How do I prevent a product from being added to the cart?) but implement custom logic to look for that product being purchased by the customer. 

You can do this by using EntityFieldQuery() and loading all of the user's orders and then you can loop through the line items and look for the product...

$orders = commerce_order_load_multiple(array(), array('uid' =&gt; $user-&gt;uid, 'status' =&gt; 'completed'));
foreach ($orders as $order) {
  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
  foreach ($order_wrapper-&gt;commerce_line_items as $delta =&gt; $line_item_wrapper) {
    if ($line_item_wrapper-&gt;commerce_product()-&gt;sku-&gt;value() == 'SOMESKU') {
    //user has bought it
    }
  }
}