public function authorize($action, $resource, $args = null)
{
$args = is_array($args) ? $args : array_slice(func_get_args(), 2);
$message = null;
$options = array_extract_options($args);
if (is_array($options) && array_key_exists('message', $options)) {
$message = $options['message'];
} elseif (is_array($args) && array_key_exists(0, $args)) {
list($message) = $args;
unset($args[0]);
}
if ($this->cannot($action, $resource, $args)) {
$resourceClass = $resource;
if (is_object($resourceClass)) {
$resourceClass = get_classname($resourceClass);
} elseif (is_array($resourceClass)) {
$resourceClass = head(array_values($resourceClass));
if (is_object($resourceClass)) {
$resourceClass = get_classname($resourceClass);
}
}
$message = $message ?: $this->getUnauthorizedMessage($action, $resourceClass);
throw new Exceptions\AccessDenied($message, $action, $resourceClass);
}
return $resource;
}