/** * Deny access to a role on a resource * * You can use '*' as wildcard * * Example: * <code> * //Deny access to guests to search on customers * $acl->deny('guests', 'customers', 'search'); * * //Deny access to guests to search or create on customers * $acl->deny('guests', 'customers', array('search', 'create')); * * //Deny access to any role to browse on products * $acl->deny('*', 'products', 'browse'); * * //Deny access to any role to browse on any resource * $acl->deny('*', '*', 'browse'); * </code> * * @param string $roleName * @param string $resourceName * @param mixed $access * @return boolean */ PHP_METHOD(Phalcon_Acl_Adapter_Memory, deny){ zval *role_name, *resource_name, *access, *action; PHALCON_MM_GROW(); phalcon_fetch_params(1, 3, 0, &role_name, &resource_name, &access); PHALCON_INIT_VAR(action); ZVAL_LONG(action, 0); phalcon_call_method_p4(return_value, this_ptr, "_allowordeny", role_name, resource_name, access, action); RETURN_MM(); }
/** * Allow access to a role on a resource * * You can use '*' as wildcard * * Example: * <code> * //Allow access to guests to search on customers * $acl->allow('guests', 'customers', 'search'); * * //Allow access to guests to search or create on customers * $acl->allow('guests', 'customers', array('search', 'create')); * * //Allow access to any role to browse on products * $acl->allow('*', 'products', 'browse'); * * //Allow access to any role to browse on any resource * $acl->allow('*', '*', 'browse'); * </code> * * @param string $roleName * @param string $resourceName * @param mixed $access */ PHP_METHOD(Phalcon_Acl_Adapter_Memory, allow){ zval *role_name, *resource_name, *access, *action; zval *status; PHALCON_MM_GROW(); phalcon_fetch_params(1, 3, 0, &role_name, &resource_name, &access); PHALCON_INIT_VAR(action); ZVAL_LONG(action, 1); PHALCON_INIT_VAR(status); phalcon_call_method_p4(status, this_ptr, "_allowordeny", role_name, resource_name, access, action); RETURN_CCTOR(status); }
/** * Stores cached content into the Memcached backend and stops the frontend * * @param int|string $keyName * @param string $content * @param long $lifetime * @param boolean $stopBuffer */ PHP_METHOD(Phalcon_Cache_Backend_Memcache, save){ zval *key_name = NULL, *content = NULL, *lifetime = NULL, *stop_buffer = NULL; zval *last_key = NULL, *prefix, *frontend, *memcache = NULL, *cached_content = NULL; zval *prepared_content, *ttl = NULL, *flags, *success; zval *options, *special_key, *keys = NULL, *is_buffering; PHALCON_MM_GROW(); phalcon_fetch_params(1, 0, 4, &key_name, &content, &lifetime, &stop_buffer); if (!key_name) { PHALCON_INIT_VAR(key_name); } if (!content) { PHALCON_INIT_VAR(content); } if (!lifetime) { PHALCON_INIT_VAR(lifetime); } if (!stop_buffer) { PHALCON_INIT_VAR(stop_buffer); ZVAL_BOOL(stop_buffer, 1); } if (Z_TYPE_P(key_name) == IS_NULL) { PHALCON_OBS_VAR(last_key); phalcon_read_property_this(&last_key, this_ptr, SL("_lastKey"), PH_NOISY_CC); } else { PHALCON_OBS_VAR(prefix); phalcon_read_property_this(&prefix, this_ptr, SL("_prefix"), PH_NOISY_CC); PHALCON_INIT_NVAR(last_key); PHALCON_CONCAT_VV(last_key, prefix, key_name); } if (!zend_is_true(last_key)) { PHALCON_THROW_EXCEPTION_STR(phalcon_cache_exception_ce, "The cache must be started first"); return; } PHALCON_OBS_VAR(frontend); phalcon_read_property_this(&frontend, this_ptr, SL("_frontend"), PH_NOISY_CC); /** * Check if a connection is created or make a new one */ PHALCON_OBS_VAR(memcache); phalcon_read_property_this(&memcache, this_ptr, SL("_memcache"), PH_NOISY_CC); if (Z_TYPE_P(memcache) != IS_OBJECT) { phalcon_call_method_noret(this_ptr, "_connect"); PHALCON_OBS_NVAR(memcache); phalcon_read_property_this(&memcache, this_ptr, SL("_memcache"), PH_NOISY_CC); } if (Z_TYPE_P(content) == IS_NULL) { PHALCON_INIT_VAR(cached_content); phalcon_call_method(cached_content, frontend, "getcontent"); } else { PHALCON_CPY_WRT(cached_content, content); } /** * Prepare the content in the frontend */ PHALCON_INIT_VAR(prepared_content); phalcon_call_method_p1(prepared_content, frontend, "beforestore", cached_content); if (Z_TYPE_P(lifetime) == IS_NULL) { PHALCON_INIT_VAR(ttl); phalcon_call_method(ttl, frontend, "getlifetime"); } else { PHALCON_CPY_WRT(ttl, lifetime); } PHALCON_INIT_VAR(flags); ZVAL_LONG(flags, 0); /** * We store without flags */ PHALCON_INIT_VAR(success); phalcon_call_method_p4(success, memcache, "set", last_key, prepared_content, flags, ttl); if (!zend_is_true(success)) { PHALCON_THROW_EXCEPTION_STR(phalcon_cache_exception_ce, "Failed storing data in memcached"); return; } PHALCON_OBS_VAR(options); phalcon_read_property_this(&options, this_ptr, SL("_options"), PH_NOISY_CC); PHALCON_OBS_VAR(special_key); phalcon_array_fetch_string(&special_key, options, SL("statsKey"), PH_NOISY); /** * Update the stats key */ PHALCON_INIT_VAR(keys); phalcon_call_method_p1(keys, memcache, "get", special_key); if (Z_TYPE_P(keys) != IS_ARRAY) { PHALCON_INIT_NVAR(keys); array_init(keys); } if (!phalcon_array_isset(keys, last_key)) { phalcon_array_update_zval(&keys, last_key, &ttl, PH_COPY | PH_SEPARATE); phalcon_call_method_p2_noret(memcache, "set", special_key, keys); } PHALCON_INIT_VAR(is_buffering); phalcon_call_method(is_buffering, frontend, "isbuffering"); if (PHALCON_IS_TRUE(stop_buffer)) { phalcon_call_method_noret(frontend, "stop"); } if (PHALCON_IS_TRUE(is_buffering)) { zend_print_zval(cached_content, 0); } phalcon_update_property_bool(this_ptr, SL("_started"), 0 TSRMLS_CC); PHALCON_MM_RESTORE(); }