cleiver.com | blog - Página 5

Utilizando o ACL no CakePHP

18.09.2008 | CakePHP
Tags: , , ,

CakePHPEstamos começando um novo projeto aqui na empresa e para ele decidimos usar o CakePHP como framework de desenvolvimento. Desde semana passada estou estudando a utilização do ACL para controle de acesso às páginas do sistema, mas como muitos devem saber, o book do site do Cake não é tão explicativo quanto deveria. :P

Quer dizer, o exemplo do conceito sendo explicado utilizando os personagens d’O Senhor dos Anéis é sensacional! Mas só serve pra isso mesmo, explicar o conceito. Por que na prática, a coisa é um pouco mais complexa.

Pra tentar entender o funcionamento, criei o blog de exemplo do próprio “Livro de Receitas” do CakePHP. Porém ele é simples demais e nem tem usuários. Então criei uma tabela para armazenar somente um login e senha de acesso. Nada muito difícil para quem já mexeu com o Cake pelo menos uma vez.

Aí vem outro problema: por padrão, o ACL vem pronto pra trabalhar com CRUD, e dificilmente teremos um sistema que só utilize os métodos do CRUD. O que fazer então? Depois de dias lendo documentação sobre o assunto, chegou até mim um texto (perdi o link, desculpem. :/) que dizia, resumidamente, que era só associar os actions como ACOs normalmente, e na hora de salvar no banco, dar acesso total nos

Então, supondo que esteja tudo pronto, vamos resolver o grande problema que encontrei nos blogs que li: Os métodos de criação dos AROs e dos ACOs, bem como seus relacionamentos, não devem ficar espalhados pela aplicação. Crie um arquivo PHP separado para executar somente quando você precisar popular o banco de dados com as informações de acesso.

Então vamos começar criando um pequeno script que cria os AROs do nosso “sistema”:

1
2
3
4
5
6
7
8
9
10
$aro = new aro();
$groups = array(
   0 => array( 'alias' => 'Admins' ),
   1 => array( 'alias' => 'Authors' ),
   2 => array( 'alias' => 'Spammers' )
   );
foreach( $groups as $group ) {
   $aro->create();
   $aro->save( $group );
}

Esse script vai gerar grupos de usuários do sistema. temos os administradores, os autores do blog e spammers, que são usuários que não terão acesso a nada.

Agora vamos criar alguns usuários:

1
2
3
4
5
6
7
8
9
10
$aro = new aro();
$users = array(
   0 => array( 'alias' => Pedro, 'parent_id' => 1 , 'model' => 'User', 'foreign_key' => 1 ),
   1 => array( 'alias' => Rafael, 'parent_id' => 2 , 'model' => 'User', 'foreign_key' => 2 ),
   2 => array( 'alias' => Adriana, 'parent_id' => 3 , 'model' => 'User', 'foreign_key' => 3 )
   );
foreach( $users as $user ) {
   $aro->create();
   $aro->save( $user );
}

Acima estou criando 3 usuários apenas, um para cada grupo. O campo parent_id aponta para o grupo que o usuário faz parte. O campo model, como o próprio nome diz, especifica um modelo. No caso, ele guarda o nome do modelo que o id armazenado em foreign_key pertence. Então no exemplo acima, o id do Pedro na tabela User é 1.

Agora vamos criar algumas ACOs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$aco = new aco();
$group = array( 'alias' => 'Post' );
$aco->create();
$aco->save( $group );
$actions = array(
   0 => array( 'alias' => 'index' , 'parent_id' => 1 ),
   1 => array( 'alias' => 'view' , 'parent_id' => 1 ),
   2 => array( 'alias' => 'add' , 'parent_id' => 1 ),
   3 => array( 'alias' => 'delete' , 'parent_id' => 1 ),
   4 => array( 'alias' => 'edit' , 'parent_id' => 1 )
   );
foreach( $actions as $action ) {
   $aco->create();
   $aco->save( $action );
}

O processo para criação é exatamente o mesmo do utilizado no ARO. Aqui, primeiro criei um grupo com o nome do próprio controller, assim fica mais fácil organizar. Depois, criei uma ACO para cada action do controller e as relacionei com o grupo criado anteriormente.

Se você não definir nenhum tipo de permissão de acesso, por padrão, é tudo negado. Então vamos definir algumas permissões:

1
2
3
4
$this->Acl->allow( 'Admins' , 'Post' , '*' );
$this->Acl->allow( 'Authors' , 'Post' , '*' );
$this->Acl->deny( 'Authors' , 'Post/delete' , '*' );
$this->Acl->deny( 'Spammers' , 'Post' , '*' );

Na primeira linha, dei acesso total à todas as actions do controller Post para os usuários que fizerem parte do grupo Admins. Na segunda linha, dei acesso total também aos autores do blog, mas na terceira eu tirei a permissão deles de deletar algum post, ou seja, eles podem tudo, menos deletar o texto que escreveram. Assim é mais fácil do que ficar fazendo um allow para cada action do controller. Na quarta linha tirei a permissão de acesso à todas as actions do controller para quem for do grupo spammers.

Para verificar quem tem acesso ou não, dentro do seu controller, no método beforeFilter por exemplo, basta fazer o seguinte:

1
$this->Acl->check( 'Authors' , 'Post/delete' )

No nosso caso vai retornar FALSE.

Basicamente é isso. Tem outras coisas interessantes para se trabalhar junto com o ACL, como o ACLBehavior e o ACL Management Plugin. Uma boa leitura que pode ajudar um bocado é esse tutorial de utilização que um cara fez pro caso dele, tem até um sitezinho de exemplo.

5 Comentários

Dinheiro não é tudo

15.09.2008 | Devaneios
Tags: ,

Em pleno século XXI, eu, cidadão das Américas (ainda que do Sul), venho com esse papo mole de que dinheiro não é tudo. Sei que a proposta do post não é nova, mas sei também que tem muita gente que vai concordar comigo que dinheiro não é tudo.

Nós como meros desenvolvedores que somos, por vezes somos a menor parte do processo de desenvolvimento de um software ( que paradoxo não?). Constantemente trabalhamos sobre pressão, com prazos apertados, especificações falhas e com legados de softwares que sofremos pra manter. Mas se é tão ruim assim, por que continuamos? Simples: por que amamos desenvolver software. Achamos mágico construir soluções que acelerem o processo de comunicação entre os seres humanos, sejam eles quem forem. Gostamos de bits, patterns, miracle driven developments, aprender coisas novas pra agilizar os processos e por ai vai.

Por isso nos envolvemos muito com o nosso trabalho. Saimos da empresa onde trabalhamos e vamos pra casa fazer o que? Programar ou estudar programação ainda mais – e isso normalmente invade nossos finais de semana. Por essa razão não é difícil imaginar que nos envolvemos e muito com o que fazemos, já que fazemos por que somos apaixonados por isso.

E o que acontece quando percebemos que no ambiente onde trabalhamos existem processos ruins, que podiam ser otimizados mas que por “força maior” não os são ? Perdemos nosso humor. Parece que a “inspiração” para programar acabou, perdemos o ânimo para digitar um ponto-e-vígula sequer. Programador que ama o que faz não consegue digerir muito bem essa coisa de “isso é problema da empresa, as 18h vou pra casa tranquilo”.

E é ai que entra o titulo do post “Dinheiro não é tudo”. Ok, gostamos de dinheiro por que precisamos e por que nos trás conforto, mas dinheiro não compra entusiasmo – muito menos patrimônio intelectual.

Por exemplo, sempre tem aquele papo de que todo programador deve virar gerente de projetos. Por quê? Simples, porque gerente ganha mais. Mas, e se eu não gostar de ficar “o dia todos de frente pro Project?” (hei isso foi uma piada, por favor, ria). E se eu achar graça em outra coisa? E se o que me deixa feliz é digitar um bando de palavras em inglês e apertar o F5? (preciso dizer que foi outra piada?). Quem disse que eu estou programando só por dinheiro?

Por isso saiba discernir se você esta construindo o seu futuro simplesmente pelo que vai ganhar ou pelo que vai viver. Não deixe seu prazer em desenvolver softwares da maneira correta enferrujar junto com os processos administrativos da sua empresa. Dinheiro é bom, mas quando a gente morre fica tudo pra um bando de filhos ingratos que não vão saber quantas linhas de código você teve que escrever para consegui-lo. E se você morrer sem filhos, alguma mulher vai acabar gastando sua grana mesmo. (…) Não substitua talento por desculpas. Se quando você esta no trabalho, só fica pensando em ir embora e quando esta em casa fica com aquela sensação de frustação de voltar pra empresa, é melhor você dar uma olhada nesse vídeo aqui.

Texto copiado e colado descaradamente do Blog do Pedrinho.

Nenhum comentário

Avatares do Tux!

12.09.2008 | Devaneios, Linux
Tags: , ,

Tux

Para quem gosta do Tux, no site Free Avatars Download tem um pacote com 946 images dele caracterizado como vários personagens da cultura pop. :P

Para baixar o pacote basta ir direto no post ou direto no Rapidshare.

1 Comentário

Cara nova (de novo!)!

04.09.2008 | Devaneios
Tags: ,

De alguma forma que não me lembro agora, cheguei nesse post da Smashing Magazine com vários temas para o WordPress. Gostei de vários, mas em especial do Charred e do Vikiworks V5. Mas ambos tinham alguma coisa que não me agradava, então peguei o fundo de um, a estrutura do outro , adaptei umas coisas, tirei outras e pronto, tá aí o novo layout do blog. Tudo isso em menos de 1 hora! =D

Com certeza ainda vou ter que adaptar algumas coisas (dessa vez lembrei dos comentários!) e ainda vou atualizar alguns posts anteriores pra nova formatação. De novidade mesmo, só o fato de que agora tem um link ali do lado pro feed RSS que não tinha antes.

1 Comentário

Instalação básica do Debian 4 (Etch)

30.08.2008 | Linux
Tags: , ,

Há duas semanas estou fazendo um curso de linux. Há anos não mexia de verdade com o sistema do pinguim então estava (e ainda estou, confesso) meio enferrujado, mas agora ando empolgado com ele de novo! Então pra quem for meio perdido, que nem eu, segue um passo a passo simples de uma instalação e configuração básica do Debian 4 “Etch”.

Para começar, você pode baixar a versão mínima (netinst) mais recente no site da própria Debian. Após baixar, basta gravar a imagem em um cd, colocar no drive e dar boot na máquina. Na tela de instalação que surgir, digite o seguinte comando para uma instalação gráfica básica:

install vga=788

O comando vga=788 cria um buffer de video durante o boot. A instalação é bem simples e auto-explicativa, não vou me ater a esses detalhes por enquanto. Após concluir a instalação, você vai ter um sistema extremamente básico e sem nada instalado. Então vamos começar algumas configurações iniciais.

Configurações do terminal

Vamos começar retirando esse beep extremamente irritante que toca quase sempre que você aperta uma tecla. :P Então, abra o arquivo ~/.bashrc e acrescente a seguinte linha no final do arquivo:

setterm -bfreq 0 -store

Esse comando desliga o som do beep, se quiser aumentar ou diminuir o barulho, basta alterar o valor de 0. Aproveitando que o arquivo está aberto, acrescente a seguinte linha para incrementar o auto-completar do TAB:

source /etc/bash_completion

Também é nesse arquivo que você pode deixar o comando ls com resultados coloridos,
bastando descomentar as linhas:

export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'

Eu, particularmente, acrescento o parâmetro -h após o –color=auto, para que o tamanho dos arquivos seja legível por humanos, ficando dessa forma (como se algum outro tipo de animal utiliza-se computadores :P):

export LS_OPTIONS='--color=auto -h'

Nesse arquivo é só isso. Lembrando que essas alterações vão afetar somente o usuário com o qual você realizou a alteração. Para que elas ocorram com todos os usuários do sistema, basta coloca-las no arquivo /etc/profile.

Configurando uma conexão com a internet via Velox

Como estamos totalmente desconectados do mundo, o único repositório disponível na lista do apt-get vai ser o próprio CD-ROM (o instalador comenta a linha do repositório da Debian durante a instalação). Para utiliza-lo, execute o seguinte comando:

apt-cdrom add

Depois disso, vamos instalar o pacote pppoeconf para configurar nossa conexão.

apt-get install pppoeconf

Terminando a instalação, basta executar o aplicativo (comando pppoeconf) e responder as perguntas que o programa solicitar. Ele vai criar uma conexão chamada dsl-provider (no meu caso, pelo menos). Como esse nome é meio longo, vamos renomea-lo para algo melhor e mais fácil:

mv /etc/ppp/peers/dsl-provider /etc/ppp/peers/velox

Com o comando pon velox, você conecta ao seu provedor. Já com o poff você desconecta o computador da rede. E com o plog você pode ver o status da conexão.

Agora que estamos na rede, podemos atualizar o apt-get e instalar os programas que quiser. Então abra o arquivo /etc/apt/sources.list e descomente as linhas dos repositórios padrão. Infelizmente, muitos dos aplicativos que eu quis instalar não foram localizados nesses dois repositórios, mas após acrescentar os dois seguintes, não tive mais problemas. Basta acrescentar ao final do arquivo:

deb ftp://ftp.us.debian.org/debian/ stable main contrib non-free
deb http://www.backports.org/debian etch-backports main contrib

Depois execute o update (apt-get update) e quando terminar, é só começar a instalar seus pacotes. :P De cara instalei 6. Comecei instalando o Vim (ninguém merece o Vi “puro”):

apt-get install vim

Depois instalei o logo do Debian que ilustra o início desse post:

apt-get install linuxlogo

Após instalado, basta renomear o arquivo /etc/issue.linuxlogo para /etc/issue. Mas antes, faça um backup do arquivo existente, nunca se sabe. ;P

mv /etc/issue /etc/issue.bkp
mv /etc/issue.linuxlogo /etc/issue

Depois disso, instalei o X.org para poder ter uma interface gráfica (nunca se sabe quando vai precisar):

apt-get install xorg

E depois instalei o gerenciador de janelas Xfce:

apt-get install xfce4

Escolhi ele por ser muito mais leve que o gnome ou o kde. Para inicia-lo, basta executar o comando startx e pronto! Se por um acaso seu mouse ficou extremamente “lento”, Saia do modo gráfico e abra o arquivo /etc/X11/xorg.conf e localize o bloco com informações sobre seu mouse. No meu caso, como instalei no notebook, o bloco era o da Synaptics Touchpad. Abaixo da última opção acrescente a seguinte linha:

Option "Min Speed" "0.3"

Se quiser mais rápido, aumente o valor. Senão, diminua. No final, meu bloco ficou da seguinte forma:

Section "InputDevice"
Identifier    "Synaptics Touchpad"
Driver        "synaptics"
Option        "SendCoreEvents"    "true"
Option        "Device"            "/dev/psaux"
Option        "Protocol"          "auto-dev"
Option        "HorizScrollDelta"  "0"
Option        "Min Speed"         "0.3"
EndSection

Salve, feche o arquivo e inicie novamente o modo gráfico. Pra finalizar, instalei o Firefox:

apt-get install firefox

E também instalei logo o plugin do Flash Player:

apt-get install flashplugin-nonfree

“Resumidamente”, é isso. =]

5 Comentários


Dicas de Vim

22.08.2008 | Linux
Tags: , ,

Desde que comecei o curso de linux, to meio viciado nesse editor. Antigamente só sabia entrar e sair dele, mas agora que peguei o jeito, não custa nada compartilhar, muita gente ainda pode se enrolar um bocado. ;P

Para copiar e colar linhas no vi, basta estar no modo de comando (pressione ESC caso esteja em dúvida) e ir para a linha desejada:

yy = Copia toda a linha
3yy = Copia 3 linhas a partir do cursor
p = Cola a linha copiada
5p = Cola cinco vezes a linha copiada
dd = Recorta a linha
4dd = Recorta quatro linhas a partir do cursor

Caso você deseje copiar apenas uma palavra ou trecho da linha, basta entrar no modo visual. Para isso, vá para o primeiro caractere do trecho desejado e pressione a tecla v, depois, mova o cursor com as teclas de direção para selecionar o que você deseja. Após selecionar, basta digitar y para copiar, d para recortar e p para colar.

Caso tenha feito alguma coisa errada, basta pressionar u para cada ação que você deseja desfazer. Caso tenha desfeito mais ações que o necessário, basta refazer, pressionando ctrl+r.

Tá fazendo um script e deu erro na linha 1387 e tá cansado de pressionar a seta pra baixo e pensar na vida? Digite :1387 e seja feliz. Ou então você quer ir direto pra última linha do arquivo mas não quer ter que digitar :10000000 e ainda correr o risco de não funcionar, basta pressionar shift+g.

Se o que você quer é procurar por uma palavra específica no arquivo, basta digitar / seguido da palavra desejada (sem o :), por exemplo: /todo. Se a ocorrência encontrada não for a que você queria, basta ir pressionando n até chegar na que você quiser, se na pressa você passou direto pela palavra, basta pressionar shift+n que o vi vai voltando para ocorrências anteriores.

Mas se ao invés de somente localizar, você quiser substituir a ocorrência de uma palavra, basta executar o seguinte comando (supondo que você queira substituir “todo” por “done”): :s/todo/done/. Sem espaços e com a barra no final! Mas esse comando funciona somente na linha onde está o cursor. para substituir todas as ocorrências do texto, basta digitar :%s/todo/done/g. Esse g no final do comando que diz que vai trocar todas as ocorrências. Sem ele, o vi troca somente a primeira ocorrência de cada linha. Resumindo então: Sem o sinal de %, troca somente na linha onde está o cursor. Com o sinal de %, troca em todo o arquivo. Sem o g no final troca somente a primeira ocorrência de cada linha. Com o g no final, troca todas as ocorrências de cada linha.

Se por algum motivo, no meio da edição do arquivo você precisar executar algum comando no shell do linux, mas não quer fechar o editor nem usar outro terminal, basta digitar o comando desejado dessa forma, por exemplo: :!date. O vi vai executar o comando e voltar para a edição do arquivo como se nada tivesse acontecido. Caso você queira colocar o resultado do comando dentro do seu arquivo, basta colocar o cursor no local desejado para a inserção e digitar seu comando com um ponto antes da exclamação, assim: :.!date. O vi executará o comando date e escreverá a data atual dentro do seu arquivo.

Agora vamos supor que você queira copiar o conteúdo de um outro arquivo dentro do seu. Digite /split arquivo. Por exemplo, :split /etc/motd. O vi vai dividir a tela em dois blocos e você poderá editar os dois arquivos normalmente. para trocar entre os paineis, basta pressionar ctrl+ww. Você pode abrir vários arquivos dessa forma, mas a área de edição de cada um vai diminuindo, claro. :P

Caso você esteja pensando “Pô, bem que o vi poderia ter abas também, todo mundo tem abas hoje em dia!” fique feliz, desde a versão 7 o vi possui esse recurso. Para abrir uma nova aba, basta digitar :tabnew arquivo. Para navegar através delas, basta usar os comandos: :tabnext, :tabprev, :tabfirst, :tablast ou :tab n, onde n é o número da tab desejada.

De forma similar, quando você abrir vários arquivos simultâneos no vi ($vi arq1 arq2 arq3, por exemplo), para navegar entre esses arquivos basta usar os comandos: :next, :previous, :first, :last ou :3next ou :5prev. Nos dois últimos casos, o vi vai pular tantos arquivos quanto for o valor do número antes do comando (se tiver isso tudo de arquivo, claro).

E finalmente para sair do editor, além do famigerado :wq para salvar e sair, você também pode pressionar shift+zz.

Dois comandos que eu aconselho colocar direto no arquivo de configuração do Vim para ele já abrir com essas funcionalidades é o syntax highlight e a numeração de linhas.

Para fazer isso, basta editar o arquivo /etc/vim/vimrc e descomentar a linha syntax on para habilitar o highlight e incluir o comando set number para numerar as linhas.

Além desses, o Vim possui milhares de outros comandos e formas de fazer essas mesmas ações que falei aqui. Para saber mais, basta ler a documentação do programa.

6 Comentários

A novela HP – ACABOU!

14.08.2008 | Devaneios
Tags: , ,

E finalmente após duas semanas (até parece que seria uma semana mesmo) o notebook chegou! Não sei como eles conseguiram escrever meu nome certo na nota fiscal e “Cleide” na nota de entrega, mas o equipamento tá certo e funcionando, então sem problemas.

Infelizmente ele veio com o Windows Vista Home Basic Ultra Simple Edition. Levou cerca de 15 minutos para iniciar pela primeira vez e comsumia 734MB de memória RAM. Mas tá bom, “foi de graça”, afinal.

No mais, o suporte da HP continua excelente! Enquanto meu problema era com eles, sempre fui muito bem atendido e sem demora. Mas quando meu problema passou para o setor de “”"qualidade”"” é que eu comecei a ter dores de cabeça. Horas pendurado no telefone aguardando ser atendido, informações que não me diziam nada e falsas promessas. Sem falar na confusão que arrumaram com meu notebook, enviando o antigo com problema ao invés do novo e atrasando a entrega “”"prioritária”"” em mais de uma semana.

1 Comentário

Desleixo, Workshop e Emprego!

07.08.2008 | Devaneios
Tags: , ,

Tenho sido um tanto quanto relapso com o blog. Esqueci dele aqui e não fiz os ajustes finais do layout, prova disso, foi a falta dos comentários muito bem observada pelo Pedrinho, vou ver se conserto isso ainda hoje.

Falando de coisa séria, dia 19 de Agosto vai rolar o workshop gratuito Desmistificando Scrum & Agile no Hotel Guanabara, no centro do Rio de Janeiro. Eu, Pedrinho e Rafael já fizemos nossas inscrições! No dia do evento será serteado duas bolsas de 50% para o treinamento de Scrum ministrado pelo pessoal da Teamware!

Aproveitando o gancho sobre desenvolvimento, a empresa onde trabalho está com vagas abertas para programador pleno e estagiário. Quem souber programar com PHP orientado a objetos, tiver noções se padrões web e javascript e quiser tentar a vaga, basta mandar o currículo para andreia@3jane.com.

Nenhum comentário

A novela HP – Final (???)

01.08.2008 | Devaneios
Tags: , ,

Depois de dois dias tentando mandar o fax, consegui. Liguei pra lá só pra confirmar o envio, vai saber quando eles iriam ver o fax, né? Nessa quarta me ligaram da transportadora avisando que meu notebook havia chegado e que eu podia ir buscar. Achei estranho, já que iriam entregar em casa, mas dane-se!, finalmente teria meu notebook de volta! Na quinta fui lá e era o antigo com problema. ¬¬

Ontem mesmo liguei para a HP para saber o que aconteceu, fiquei mais duas horas ouvindo musiquinha chata e apareceu uma gravação falando que o atendimento era até as 17 horas. Hoje liguei e me informaram que haviam tido um problema de comunicação e enviaram o antigo por engano, mas que meu caso agora era prioridade e enviariam o novo o quanto antes. De acordo com a menina que me atendeu, semana que vem ele chega. O que é mais uma semana para quem já está esperando há 2 meses, né? :P

No mais, essa semana saiu uma notícia na Geek falando desse problema que eu tive.

Nenhum comentário

Página 5 de 6
Primeiro234[ 5 ]6