Как назвать этот ориентированный на ключ шаблон защиты доступа? - PullRequest
18 голосов
/ 24 июля 2010

Видимо этот ориентированный на ключ шаблон защиты доступа :

class SomeKey { 
    friend class Foo;
    SomeKey() {} 
    // possibly non-copyable too
};

class Bar {
public:
    void protectedMethod(SomeKey); // only friends of SomeKey have access
};

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

Должно быть:

  • кратко
  • передать цель защиты доступа
  • в идеале подразумевать, что прокси не требуется (?)

Ответы [ 4 ]

4 голосов
/ 21 августа 2010

Я предлагаю присвоить этому имени Badge Idiom , обозначающий токен, представленный по запросу, подтверждающий обладание полномочиями. Я считаю, что это лучшая метафора, чем те, которые вращаются вокруг термина Ключ во многих других ответах здесь.

«Ключ» уже достаточно перегружен в терминологии программирования, объединяя, по крайней мере, понятия поиска и ограниченного доступа. Кроме того, реальные ключи обычно работают с отдельными блокировками, а не с набором всех блокировок от производителя, и принимающий класс в этом шаблоне - это набор не блокировок, а самозащитных объектов, которых просят выполнить действия.

«Значок» передает принцип, согласно которому токен предоставляет полномочия всему классу других объектов, а не только одному объекту. Термин может быть слишком зависим от (ориентированных на США?) Изображений полиции или безопасности, и я рассматривал такие термины, как Повестка дня или Ордер , но они, казалось, были слишком сосредоточены на предоставлении третьей стороне доступ. В любом случае, люди с данным типом значка могут вынести кодифицированное поведение из классов людей, уважающих эти значки. Я вижу общее взаимодействие следующим образом:

  • A: Эта вечеринка слишком громкая. Отключи стерео. (Вручает значок)
  • Б: О, хорошо, офицер. (Стон)
4 голосов
/ 24 июля 2010

Мне нравится, в порядке убывания предпочтений:

  • идиома друга с паролем
  • идиома друга с паролем
  • идиома друга с паролем
  • идиома друга-ключевой двери
  • идиома частичного друга
  • идиома друга-ограниченного доступа

Я отошел от обозначения замка-ключа / ключа-замочной скважиныСхема для схемы присвоения имен, которая выросла на мне.

4 голосов
/ 24 июля 2010

SomeKey выглядит как проход Backstage для входа в Bar :: protectedMethod.Так что в этой области все должно быть хорошо: идиома паспорта, идиома лозунга, идиома паспорта, идиома VIP ... классный доступ?

2 голосов
/ 24 июля 2010

Существуют и другие способы сделать это в более общем виде, используя наследование.Здесь классный торт функционирует как замочная скважина и ключ.Здесь любой класс, который наследует (также может быть статическое наследование) от cake, может получить доступ к подмножеству SomeClass, определенному как доступный в cake, и, конечно, вы можете иметь несколько разных подмножеств в нескольких разных классах.

class cake;
class SomeClass {
    friend class cake;
    void foo();
};
class cake {
    void DoFoo(SomeClass& class) { class.foo(); }
};
class lols : cake {
    // Now we can DoFoo().
};

Я бы назвал это замком и ключом.

...