Можно ли использовать атрибут для нескольких категорий в ALFA?

doctor может принадлежать subjectCat (пользователю, который пытается получить доступ) или resourceCat (направляющему врачу медицинского обследования, к которому субъект пытается получить доступ).

Как мне кажется, для поддержки обоих случаев мне нужно определить doctor для каждой категории отдельно:

namespace subject {
     namespace doctor {
          attribute id {
                    category = subjectCat
                    id = "id"
                    type = string
          }
          attribute lastname {
                    category = subjectCat
                    id = "lastname"
                    type = string
          }
          //and 20 more attributes...
      }
}


namespace resource {
     namespace doctor {
          attribute id {
                    category = resourceCat //this line is the only difference
                    id = "id"
                    type = string
          }
          attribute lastname {
                    category = resourceCat //this line is the only difference
                    id = "lastname"
                    type = string
          }
          //and 20 more attributes...
      }
}

Это довольно громоздко и имеет много избыточности. Могу ли я что-нибудь сделать, чтобы избежать этого?


person OneWorld    schedule 24.05.2018    source источник


Ответы (1)


Ты прав. Вы бы переопределили атрибуты. В каком-то смысле вы используете тот же объект из своей информационной модели (например, доктор), но в одном случае этот объект (доктор) действует как субъект. В другом он действует как объект, который вы защищаете, например.

  • Врач может просматривать медицинскую карту пациента, к которому он назначен.
  • Сотрудник отдела кадров может просматривать зарплату врача.

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

Вы можете сделать acme.user.staff.doctor и атрибутировать name. Затем вы можете сделать acme.object.doctor и атрибутировать name.

Обратите внимание, что Eclipse также позволяет выполнять автозаполнение:

Автозаполнение имен атрибутов в ALFA внутри Eclipse

person David Brossard    schedule 24.05.2018
comment
Просто для уточнения. Мне нужно снова определить doctor для каждой категории? - person OneWorld; 25.05.2018
comment
Я скопировал ваш адрес электронной почты. Вы можете снять его, если хотите. Я просто хотел попросить автодополнение кода для фрагментов пространства имен при составлении правил. Например. мой атрибут com.mycompany.resource.person.patient.name, я хочу ввести com.m и нажать Ctrl + Space, чтобы получить следующие возможные пространства имен. К сожалению, я слышу только звук ошибки. - person OneWorld; 25.05.2018
comment
Я думаю, что автозаполнение работает... Посмотрите на скриншот - person David Brossard; 25.05.2018
comment
Это позволит вам завершить, если вы начнете вводить role. Не отображается, если вы начинаете вводить acme.u - person OneWorld; 25.05.2018