Нужно руководство, чтобы начать с Zend ACL

Backticks (`) используются для определения шаблонных литералов.

Особенности:

  • мы можем интерполировать любые выражения в шаблонных литералах.
  • Они могут быть многострочными.

Примечание: мы можем легко использовать одинарные кавычки (') и двойные кавычки (") внутри обратных шагов (`) .

Пример:

var nameStr = `I'm "Rohit" Jindal`;

Чтобы интерполировать переменные или выражение, мы можем использовать обозначение ${expression} для этого.

var name = 'Rohit Jindal';
var text = `My name is ${name}`;
console.log(text); // My name is Rohit Jindal

Multi-line Строки означают, что вам больше не нужно использовать \n для новых строк.

Пример:

const name = 'Rohit';
console.log(`Hello ${name}!
How are you?`);

Выход:

Hello Rohit!
How are you?
30
задан assylias 1 May 2012 в 09:24
поделиться

1 ответ

Я реализовал подобную вещь не так давно. Фундаментальное понятие следует в примере кода.

я создал свой собственный configAcl.php файл, который загружается в файле начальной загрузки, в моем случае это - index.php. Вот то, как это было бы согласно Вашему случаю:

$acl = new Zend_Acl();

$roles  = array('admin', 'normal');

// Controller script names. You have to add all of them if credential check
// is global to your application.
$controllers = array('auth', 'index', 'news', 'admin');

foreach ($roles as $role) {
    $acl->addRole(new Zend_Acl_Role($role));
}
foreach ($controllers as $controller) {
    $acl->add(new Zend_Acl_Resource($controller));
}

// Here comes credential definiton for admin user.
$acl->allow('admin'); // Has access to everything.

// Here comes credential definition for normal user.
$acl->allow('normal'); // Has access to everything...
$acl->deny('normal', 'admin'); // ... except the admin controller.

// Finally I store whole ACL definition to registry for use
// in AuthPlugin plugin.
$registry = Zend_Registry::getInstance();
$registry->set('acl', $acl);

Другой случай - то, если Вы хотите позволить обычному пользователю, только "перечисляют" действие со всеми Вашими контроллерами. Это довольно просто, Вы добавили бы строку как это:

$acl->allow('normal', null, 'list'); // Has access to all controller list actions.

Следующий необходимо создать новый плагин, который заботится об учетных данных, проверяющих автоматически, когда существует запрос на некоторое действие контроллера. Эта проверка происходит в предварительной отправке () метод, который называют перед каждым призывом к действию контроллера.

Вот AuthPlugin.php:

class AuthPlugin extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $loginController = 'auth';
        $loginAction     = 'login';

        $auth = Zend_Auth::getInstance();

        // If user is not logged in and is not requesting login page
        // - redirect to login page.
        if (!$auth->hasIdentity()
                && $request->getControllerName() != $loginController
                && $request->getActionName()     != $loginAction) {

            $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
            $redirector->gotoSimpleAndExit($loginAction, $loginController);
        }

        // User is logged in or on login page.

        if ($auth->hasIdentity()) {
            // Is logged in
            // Let's check the credential
            $registry = Zend_Registry::getInstance();
            $acl = $registry->get('acl');
            $identity = $auth->getIdentity();
            // role is a column in the user table (database)
            $isAllowed = $acl->isAllowed($identity->role,
                                         $request->getControllerName(),
                                         $request->getActionName());
            if (!$isAllowed) {
                $redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('Redirector');
                $redirector->gotoUrlAndExit('/');
            }
        }
    }
}

Заключительные шаги загружают Ваш configAcl.php и регистрируют AuthPlugin в файле начальной загрузки (вероятно, index.php).

require_once '../application/configAcl.php';

$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin(new AuthPlugin());

, Таким образом, это - фундаментальное понятие. Я не протестировал код выше (копия и вставил и переписал только для цели витрины), таким образом, это не является пуленепробиваемым. Только дать общее представление.

РЕДАКТИРОВАНИЕ

Для ясности. Код выше в AuthPlugin предполагает, что объект $identity заполнен пользовательскими данными ("ролевой" столбец в базе данных). Это могло быть сделано в рамках процесса входа в систему как это:

[...]
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('Users');
$authAdapter->setIdentityColumn('username');
$authAdapter->setCredentialColumn('password');
$authAdapter->setIdentity($username);
$authAdapter->setCredential(sha1($password));
$authAdapter->setCredentialTreatment('? AND active = 1');
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
    $data = $authAdapter->getResultRowObject(null, 'password'); // without password
    $auth->getStorage()->write($data);
[...]
38
ответ дан Marek Janouch 1 May 2012 в 09:24
поделиться
  • 1
    It' s стоящий замечания это, в то время как языки didn' t действительно поддерживают 8 086 сегментаций очень хорошо, изменение, которое просто просто расширило сегментные регистры до 32 битов, могло легко расширить объем памяти, доступный в платформе как Java или.NET к 64 ГБ, и с несколькими тонкими настройками далеко вне этого. Уменьшенный кэш наверху того, чтобы следовать из использования 32-разрядных а не 64-разрядных регистров смещения мог использовать такой код быстрее, чем 64-разрядное линейное обращение. Слишком плохой Intel никогда не расширял сегментные регистры вне 16 битов. – supercat 11 February 2014 в 18:06
Другие вопросы по тегам:

Похожие вопросы: