ColdFusion 9 ORM - защита объекта на низком уровне - PullRequest
0 голосов
/ 10 сентября 2009

Я смотрю на защиту низкоуровневого объекта в моей модели (объект-член), поэтому по умолчанию из него можно получить доступ только к определенной информации.

Вот возможный подход (чертовски сексуально, если это сработает!):

1) Добавьте свойство с именем «locked» - по умолчанию «true» к самому объекту.

Похоже, что единственный способ сделать это, а не привязать его к столбцу таблицы БД, - это использовать атрибут формулы, который принимает запрос. Таким образом, по умолчанию заблокирован на TRUE, я получил:

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

2) Затем я перезаписываю существующие установщики и получатели, чтобы использовать это: например

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

    </cfscript>
</cffunction>

3) Когда я использую это так:

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

показывает ScreenName (отлично!)

но ... Когда я делаю это:

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

Просто зависает !!! Похоже, что попытка установить свойство, определенное с помощью «формулы», - это нет-нет.

Есть идеи? Любой другой способ, которым мы могли бы иметь свойства, прикрепленные к объекту ORM, которые можно получить и установить без их присутствия в БД?

Идеи приветствуются!

Ответы [ 2 ]

1 голос
/ 10 сентября 2009

Любой другой способ получить свойства прикреплен к объекту ORM, которые получить и установить без них присутствовать в БД?

Да,

<cfproperty name="locked" persistent=false>

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

0 голосов
/ 24 июня 2011

Это потому, что в операторе else вашей функции вы снова вызываете то же имя функции? Так что это просто повторяется.

Попробуйте переименовать имя функции, чтобы оно не перекрывало неявный геттер, и посмотрите, что произойдет. Например

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

</cfscript>

...