ColdFusion 9 ORM — Защита объекта на низком уровне

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

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

1) Добавьте свойство под названием «заблокировано» — по умолчанию оно равно «истине» для самого объекта.

Похоже, что единственный способ сделать это, а не привязывать его к столбцу таблицы базы данных, — это использовать атрибут формулы, который принимает запрос. Итак, по умолчанию заблокировано значение 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, которые можно получить и установить без их присутствия в БД?

Идеи оценены!


person Community    schedule 10.09.2009    source источник


Ответы (2)


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

Да,

<cfproperty name="locked" persistent=false>

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

person Henry    schedule 10.09.2009
comment
Спасибо Генри. Кажется, у меня все еще такое же поведение... Как только я пытаюсь установить Locked (true), код просто зависает (кажется, возвращает пустую страницу...). - person ; 10.09.2009
comment
Генри: Кажется, что неявный установщик setLocked не определен Hibernate... Но когда я его создаю, он не работает... я начинаю думать, что это может быть ошибка CF ORM. Что вы думаете? - person ; 10.09.2009
comment
getLocked() и setLocked() должны быть доступны, если вы определили 'locked' как свойство в CFC. Он создается/заставляется работать с помощью CF, а не Hibernate. - person Henry; 10.09.2009
comment
Может быть, вы забыли установить variable.locked = #defaultLockState# в конструкторе или sudo-конструкторе? - person Henry; 10.09.2009

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

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

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

</cfscript>

person namtax    schedule 24.06.2011