2013-03-25 41 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

我認爲'受保護的'關鍵字做你需要的。 – 2013-03-25 07:02:59

回答

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 

記住,即使這只是隱藏的getter/setter,任何人都可以檢索使用send例如值。

+0

或'私人',如果你不想讓孩子課程訪問它。 – toch 2013-03-25 10:03:25

+0

是的,編輯我的答案,thx。 – Intrepidd 2013-03-25 10:04:55

2

無法阻止某人訪問該數據。無論您是否想要,元編程都會暴露出班級的所有內部元素。

也就是說,將get_sensitive_data標記爲protected或private將至少防止意外調用get_sensitive_data方法。

+0

感謝您的注意。我最終通過具有相同名稱的方法覆蓋object.sensitive_data的訪問權限,然後保護它。 – 2013-03-25 19:01:17