Подтвердить что ты не робот

Как назвать этот ключ-ориентированный шаблон защиты доступа?

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

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

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

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

Это должно быть:

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

Ответ 1

Мне нравится, уменьшая предпочтение:

  • Идентификатор дружественной клавиши
  • Идентификатор дружбы с ключом
  • Идентификатор дружественной двери
  • Ключевые слова с ключами
  • Идиома частичного друга
  • Идиома ограниченного друга

Я отошел от схемы именования key-lock/key-keyhole к схеме именования проходов, которая выросла на мне.

Ответ 2

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

Ответ 3

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

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

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

  • A: Эта партия слишком громкая. Отключите стерео. (Представляет значок)
  • B: О, хорошо, офицер. (Стон)

Ответ 4

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

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

Я бы назвал его блокировкой и ключом.