2013-03-25 4 views
0

Что такое лучший способ защитить атрибут? См. Пункт ниже:Защитить атрибут объекта ruby ​​от доступа

class Document 

    # no method outside this class can access this directly. If they call document.data, error should be thrown. including in any rendering 
    field sensitive_data 

    # but this method can be accessed by anyone 
    def get_sensitive_data 
    # where I apply the right protection 
    end 

end 
+0

Я думаю, что ключевое слово 'protected' делает то, что вам нужно. –

ответ

3

Используйте ключевое слово protected.

class Document 

    # but this method can be accessed by anyone 
    def get_sensitive_data 
    # where I apply the right protection 
    end 

    protected # or private if you don't want a child class accesses it (Thx @toch) 

    # no method outside this class can access this directly. If they call document.data, error should be thrown. including in any rendering 
    field sensitive_data 


end 

Имейте в виду, что даже если это просто скрывает геттер/сеттер, любой желающий может получить значение с помощью send, например.

+0

или 'private', если вы не хотите, чтобы дочерний класс обращался к нему. – toch

+0

Yup, отредактировал мой ответ, thx. – Intrepidd

2

Невозможно предотвратить доступ человека к этим данным. Metaprogramming предоставляет практически все внутренности вашего класса, хотите ли вы этого или нет.

Таким образом, маркировка get_sensitive_data как защищенного или закрытого будет по меньшей мере предотвращать случайный вызов метода get_sensitive_data.

+0

спасибо за внимание. я закончил переопределять доступ для object.sensitive_data, имея метод с тем же именем, а затем защищая это. –

Смежные вопросы