La verda, creo que no entendí nada. Siguiendo tu idea de los permisos, podrías usar una propiedad tipo arreglo:
Código Delphi
[-]
type
TVisibility = (vPublic, vPrivate, ... );
TChapuza = record
Visibility: TVisibility;
Value: Variant;
end;
TChapucero = class
private
FEntries: array of TChapuza;
function GetValue(I: Integer): Variant;
procedure SetValue(I: Integer; const Value: Variant);
public
property Values[I: Integer]: Variant read GetValue write SetValue;
end;
Es decir, internamente guardas cada valor junto con su 'visibilidad', y los métodos de acceso GetValue y SetValue se encargan de verificar la visibilidad y lanzar una excepción si la entrada correspondiente no tiene marcada la visibilidad 'adecuada'.
No me quedaría nada claro qué se entiende por
adecuada, pues si quieres saberlo dependiendo de la unidad desde donde se accede, pues lo veo algo difícil, o terminarás con una sintaxis mucho más engorrosa que haber declarado variables.
No sé, creo que no entiendo lo que realmente buscas.
// Saludos