def evaluate_permission(permission, *args)
      # object; Event, Discount, etc
      o = args[0]
      # default to allow
      result = true
      role = get_role_of(o)


      # evaluate procs
      if (proc = PermissionUtilities.has_procs?(permission))
        result &= proc.call(o, self)
      end

      # Here is where the addition of adding collaborations may reside

      # finally, determine if the user (self) can do the requested action
      result &= allowed_to_perform?(permission, role)

      # so we don't need to do everything again
      cache.set_for_role(
        name: permission,
        value: result,
        role: role
      )

      result
    end
def evaluate_permission(permission, *args)
      # object; Event, Discount, etc
      o = args[0]
      # default to allow
      result = true
      role = get_role_of(o)


      # evaluate procs
      if (proc = PermissionUtilities.has_procs?(permission))
        result &= proc.call(o, self)
      end

      # Here is where the addition of adding collaborations may reside

      # finally, determine if the user (self) can do the requested action
      result &= allowed_to_perform?(permission, role)

      # so we don't need to do everything again
      cache.set_for_role(
        name: permission,
        value: result,
        role: role
      )

      result
    end
performs a full evaluation of the permission
 @return [Boolean]