Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

ColdFusion:Opções de aplicativo com base na função?


Você está certo, proteger uma página e proteger elementos é diferente.

Na minha opinião e na prática, acho que vincular qualquer código a uma função ou usuário é realmente a abordagem errada. Em vez disso, vincule permissões a elementos e páginas - depois vincule funções a essas permissões. E, claro, os usuários têm funções atribuídas.

É importante ter os três:
  1. Usuários
  2. Funções
  3. Permissões <-- é isso que você está perdendo

Permissões são elementos e páginas seguros, não funções ou usuários Seu código não deve ter ideia (porque não precisa) de quais usuários ou funções existem - apenas nomes de permissões.

Quando um usuário faz login, eu pego sua(s) função(ões). Então eu pego todas as permissões que são atribuídas a essas funções (simplesmente uma lista de valores de string).

Por exemplo, em uma página eu poderia ter:
  • Adicionar item
  • Ver item
  • Excluir item

Quando codifico essa página, na verdade protejo cada um desses elementos com strings de permissão com nomes semelhantes ( addItem, viewItem, deleteItem).
<cfif listContainsNoCase( session.permissions, 'addItem' )>
    <!--- code to add item --->
</cfif>

(Nota:eu recomendo usar uma tag ou função personalizada para isso, mas para fins de exemplo, o acima funciona bem).

Se você fizer dessa maneira, fornecerá máxima flexibilidade e abstração. Se você protege elementos com base em funções, você se limita a:
  • Adicionar novas funções exigirá muitas alterações de código!
  • Alterar permissões entre funções requer muitas alterações de código!

Se você fizer como mencionado acima, nunca precisará alterar seu código de segurança dentro da base de código, pois a permissão "addItem" deve estar sempre na lógica "add item", certo? :)

Agora, se você precisar criar uma função do tipo "gerente", que tenha todas as funções de usuário e alguns direitos de administrador selecionados, basta criar essa função e atribuir as permissões corretas (talvez addItem e editItem, mas não deleteItem) . Bam! Agora tenho uma função de gerente para atribuir aos usuários sem nenhuma alteração de código !

Se eu tivesse polvilhado meu código com o tipo de coisa "é usuário esta função" - eu teria que editar meu código em todos os lugares para permitir minha nova função "gerente" - eca!

Faz sentido?

=)