diff --git a/term_permissions.module b/term_permissions.module
index 304cfdb..790674c 100644
--- a/term_permissions.module
+++ b/term_permissions.module
@@ -267,14 +267,25 @@ function term_permissions_allowed($tid, $user) {
   // We need to convert user->roles to be useful for us.
   $users_uid = implode(', ', array_keys($user->roles));
   // Permissions are enabled, check to see if this user or one of their roles
-  // is allowed.
+  // is allowed
+
+  $user_roles = array_keys($user->roles);
+
+  $i = 0;
+
+  while (isset($user_roles[$i])) {
 
   if (db_query("SELECT uid FROM {term_permissions_user} WHERE tid = :tid AND uid = :uid",
-          array(':tid' => $tid, ':uid' => $user->uid))->fetchField() ||
+  array(':tid' => $tid, ':uid' => $user->uid))->fetchField() ||
       db_query("SELECT rid FROM {term_permissions_role} WHERE tid = :tid AND rid IN (:user_roles)",
-          array(':tid' => $tid, ':user_roles' => $users_uid))->fetchField()) {
+  array(':tid' => $tid, ':user_roles' => $user_roles[$i]))->fetchField()) {
     return TRUE;
   }
+
+  $i++;
+
+  }
+
   return FALSE;
 }
 
