Pergunta

Eu tentei fazer isso várias vezes sem sorte.Depois de ler esta postagem, isso me deixou interessado em fazer isso novamente.Alguém pode me dizer por que o seguinte não funciona?

<?php

$guest = 1;
$editor = 2;
$admin = 4;

$user = $editor;

if( $user == ($editor | $admin) ) {
    echo "Test";    
}

?>
Foi útil?

Solução

Use o operador OR bit a bit (|) para definir bits, use o operador AND (&) para verificar bits.Seu código deve ficar assim:

<?php

    $guest = 1;
    $editor = 2;
    $admin = 4;

    $user = $editor;

    if( $user & ($editor | $admin) ) {
        echo "Test";    
    }

?>

Se você não entende binário e exatamente o que os operadores bit a bit fazem, você deveria aprender.Você entenderá como fazer isso muito melhor.

Outras dicas

No interesse de não reinventar a roda, por que não dar uma olhada em sistemas ACL/Autenticação como Zend-ACL e Autenticação Zend?Ambos podem ser usados ​​independentemente do Zend Framework como um todo.O controle de acesso é uma situação complicada, por isso é benéfico pelo menos observar como outros sistemas o fazem.

Já faz muito tempo que não uso PHP, mas presumo que isso funcionará:

<?php

    $guest = 1;
    $editor = 2;
    $admin = 4;

    $user = $editor;

    if( ($user == $editor) || ($user == $admin) ) {
        echo "Test";    
    }

?>

Eu usei isso no relatório de erros e funciona muito bem.Quanto às permissões de usuário, deve funcionar muito bem - você pode ter várias colunas para cada permissão de usuário em seu banco de dados ou uma coluna de nível de usuário em seu banco de dados.Escolha esta opção.

(2 | 4) está avaliando 6, mas 2 == 6 é falso.

@mk:(2 | 4) é avaliado como 6.

$guest = 1;
$editor = 2;
$admin = 4;

$user = $editor;

if (user == $editor || $user == $admin) {
    echo "Test";
}

Incrível, esta parece ser a melhor maneira de obter permissões em um CMS.Sim?Não?

Talvez eu nunca tenha feito isso dessa maneira.O que fiz foi usar operadores bit a bit para armazenar um monte de configurações "sim ou não" em um único número em uma única coluna no banco de dados.

Acho que para permissões, dessa forma funcionaria bem se você quiser armazenar permissões no banco de dados.Se alguém quiser postar algum conteúdo e quiser que apenas administradores e editores o vejam, basta armazenar o resultado de

 ($editor | $admin)

no banco de dados e, para verificá-lo, faça algo como

 if ($user & $database_row['permissions']) {
       // display content
 } else {
       // display permissions error
 }

Na minha opinião, isso não escala bem.Na verdade, não tentei usá-lo em um projeto de grande escala, mas um CMS parece muito complicado de usar.

Depende sempre do que você precisa.Se você já conhece o Zend Framework, eu apoiaria a sugestão Zend_Acl/_Auth que foi feita anteriormente.Mas tenha em mente que cada estrutura provavelmente vem com um componente semelhante.

A outra coisa que vem à mente é Usuário ao vivo.Gosto muito de trabalhar com isso também.

Eu acho que você pode fazer praticamente qualquer coisa e, embora sua abordagem pareça muito simples, ela também é limitada, pois (por meio de todos aqueles if()) você colocará grande parte da lógica ACL bem no meio do seu aplicativo.O que não é a melhor coisa a fazer para mantê-lo simples e extensível.;)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top