Django и CFR 21 Part 11

Мне нужно преобразовать приложение Django, чтобы оно соответствовало " 21 CFR Part 11", то есть сделать электронные записи одинаковыми действительность в качестве подписанных бумажных документов. Есть ли какой-либо проект или приложение, на которое я должен смотреть?

Некоторые проблемы:

  • контрольный журнал: каждое изменение в выбранных моделях должно быть прослежено (кто, когда, что)
  • обнаружение несанкционированного редактирования записей: если запись была изменена/добавлена ​​/удалена вне обычной процедуры, приложение должно обнаружить ее
  • для конкретных операций пользователю необходимо снова ввести пароль.
  • пароли должны периодически меняться и должны удовлетворять определенным критериям и т.д...

Я не нашел готового решения в сети...

3
задан Don 19 нояб. '12 в 14:54
источник поделиться

2 ответов

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

1) Я бы также предложил возвращение Django; однако вам потребуется немного больше того, что он предлагает, чтобы получить контрольный журнал с переменным уровнем с действием, которое было предпринято (в дополнение к кому и когда). Для этого я использовал один из сигналов реверсии, чтобы превратить поле комментариев в dict, который можно было бы оценить, а затем вызвал любую переменную в строке и действие, которое было принято на ней и т.д. Это ниже:

https://github.com/etianen/django-reversion

@receiver(reversion.pre_revision_commit)
    def it_worked(sender, **kwargs):
    currentVersion = kwargs.pop('versions')[0].field_dict
    fieldList = currentVersion.keys()
    fieldList.remove('id')
    commentDict = {}
    try:
        pastVersion = reversion.get_for_object(kwargs.pop('instances')[0])[0].field_dict
    except IndexError:
        for field in fieldList:
            commentDict[field] = "Created"
    except TypeError:
        for field in fieldList:
            commentDict[field] = "Deleted"
    else:
        for field in fieldList:
            try:
                pastTest = pastVersion[field]
            except KeyError:
                commentDict[field] = "Created"
            else:       
                if currentVersion[field] != pastTest:
                    commentDict[field] = "Changed"
                else:
                    commentDict[field] = "Unchanged"
    comment = commentDict
    revision = kwargs.pop('revision')
    revision.comment = comment
    revision.save()
    kwargs['revision'] = revision
    sender.save_revision

2/3) Для этого вам потребуется использовать систему разрешений на уровне объекта. Я реализовал django-guardian. В значительной степени единственный предел сложности, которую вы можете реализовать, - это то, сколько вещей вы можете сохранить прямо. Базовый набор разрешений, который вам нужно реализовать, - это просмотр, редактирование, удаление и некоторая роль контроллера данных/менеджера; однако вы, вероятно, захотите усложниться. Я бы настоятельно предложил использовать класс-представления и mixins для проверки разрешений, но функция также может работать. Это также можно использовать для запроса пароля для определенных действий, потому что вы можете каким-либо образом управлять тем, что происходит с полем.

https://github.com/lukaszb/django-guardian

4) Истекающие пароли могут быть реализованы даже с помощью системы авторизации Django, если вы хотите, или любого приложения для управления учетными записями пользователей. Вам просто нужно добавить дополнительное поле для записи любого времени, в которое вы хотите начать отсчет времени истечения срока действия. Затем при входе просто проверяйте время от обратного отсчета и посмотрите, вышли ли они за окно, и если это потребует от них создания нового пароля, направляя их через встроенное представление для изменения пароля или какой механизм подходит для вашего приложения.

Я расскажу вам, что самая сложная часть реализации CFR 21 Part 11 будет получать соответствующие люди, чтобы рассказать вам, что именно ваш проект должен выполнить для удовлетворения требований, а получение проверки на соответствие может занять много времени и дорого.

Надеюсь, это поможет вам начать работу.

5
ответ дан jondykeman 28 нояб. '12 в 9:34
источник поделиться

Django Reversion может дать вам начало в контрольном журнале, хотя вам, вероятно, не нужны все его возможности.

Для 2, 3 и 4 в вашем списке это те вещи, которые вы, скорее всего, в конечном итоге кодируете сами.

1
ответ дан Brandon 27 нояб. '12 в 23:13
источник поделиться

Другие вопросы по меткам