2009-09-10 5 views
0

Je cherche à sécuriser un objet de bas niveau dans mon modèle (un objet "membre") donc par défaut seulement certaines informations peuvent y être accédées.ColdFusion 9 ORM - Sécurisation d'un objet à un niveau bas

est ici une approche possible:

1) Ajouter une propriété appelée « verrouillé » - par défaut à « true » à l'objet lui-même (sacrément sexy si ça marcherait!).

Il semble que la seule option pour ce faire, et ne pas lier à une colonne de table db, est d'utiliser l'attribut de formule qui prend une requête. Donc, les paramètres par défaut verrouillé vrai que j'ai:

<cfproperty name="locked" formula="select 1" /> 

2) Ensuite, j'écraser les réglages existants et ers get-ers à utiliser ceci: par exemple

<cffunction name="getFullname" returnType="string"> 
    <cfscript> 
     if (this.getLocked()) { 
      return this.getScreenName(); 
     } else { 
      return this.getFullname(); 
     } 

    </cfscript> 
</cffunction> 

3) Quand je l'utilise comme ceci:

<p> #oMember.getFullName()# </p> 

montre la ScreenName (grande)

mais ... Quand je fais cela:

<cfset oMember.setLocked(false)> 
<p> #oMember.getFullName()# </p> 

Juste pend !!! Il semble que tenter de définir une propriété qui a été définie en utilisant "formula" est un non-non.

Des idées? De toute autre façon, nous pouvons avoir des propriétés attachées à un objet ORM qui sont gablables et réglables sans qu'elles soient présentes dans la base de données?

Des idées appréciées!

Répondre

1

Toute autre façon que nous pouvons avoir des propriétés attachées à un objet ORM qui sont gettable et sans les réglables étant présent dans la db?

Oui,

<cfproperty name="locked" persistent=false> 

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSB7BEC0B4-8096-498d-8F9B-77C88878AC6C.html

+0

Merci Henry. Je semble toujours avoir le même comportement .... Dès que j'essaie de setLocked (true) le code se bloque juste (semble retourner une page vide ...). –

+0

Henry: Il semble que le setter implicite setLocked n'est pas défini par Hibernate ... Mais, quand j'en crée un, ça ne semble pas fonctionner ... Je commence à penser que ça pourrait être un bug de la ORM CF. Qu'est-ce que tu penses? –

+0

getLocked() et setLocked() devraient être disponibles si vous avez défini 'locked' comme propriété dans le CFC. Il est généré/fait fonctionner par CF, pas Hibernate. – Henry

0

Est-ce parce que, dans l'instruction else de votre fonction, vous appelez à nouveau le même nom de fonction? Donc c'est juste récurrent. Essayez de renommer le nom de la fonction pour ne pas surcharger le getter implicite et voir ce qui se passe. Par exemple

<cffunction name="getNewname" returnType="string"> 
<cfscript> 
    if (this.getLocked()) { 
     return this.getScreenName(); 
    } else { 
     return this.getFullname(); 
    } 

</cfscript> 

Questions connexes