3

Djangoアプリケーションを「 21CFRPart11」に準拠するように変換する必要があります。つまり、電子記録が署名された紙の記録と同じ有効性を持つようにします。注目すべきプロジェクトやアプリケーションはありますか?

いくつかの問題:

  1. 監査証跡:選択したモデルのすべての変更を追跡する必要があります(誰が、いつ、何を)
  2. 不正なレコード編集の検出:通常の手順以外でレコードが変更/追加/削除された場合、アプリケーションはそれを検出する必要があります
  3. 特定の操作では、ユーザーはパスワードを再入力する必要があります
  4. パスワードは定期的に変更する必要があり、特定の基準などを満たす必要があります。

ネット上ですぐに使える解決策は見つかりませんでした...

4

2 に答える 2

5

私はCFR21Part11などを必要とする環境で働いています。私はまだアプリを完全に準拠させていませんが、試行錯誤を繰り返してきたので、いくつかの場所で始めることができます。

1)Djangoの復帰もお勧めします。ただし、実行されたアクション(誰がいつ実行したかだけでなく)を使用して可変レベルの監査証跡を達成するには、提供されるものよりも少し多くが必要になります。このために、復帰シグナルの1つを使用して、コメントフィールドを評価可能な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を実装しました。実装できる複雑さのほとんど唯一の制限は、自分でまっすぐに保つことができるものの数です。実装する必要のあるアクセス許可の基本セットは、表示、編集、削除、およびある種のデータコントローラー/マネージャーの役​​割です。ただし、おそらくもっと複雑にしたいと思うでしょう。パーミッションチェックにはクラスベースのビューとミックスインを使用することを強くお勧めしますが、関数ベースでも機能します。これは、フィールドに何が起こるかを好きなように制御できるため、特定のアクションのパスワードの入力を求めるためにも使用できます。

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

4)有効期限が切れるパスワードは、必要に応じてDjango認証システムまたは任意のユーザーアカウント管理アプリでも実装できます。有効期限のカウントダウンを開始する日時を記録するには、フィールドを追加する必要があります。次に、ログイン時にカウントダウンからの時間を確認し、ウィンドウを超えていないかどうかを確認します。その場合は、パスワード変更の組み込みビューまたはアプリに適したメカニズムを使用して、新しいパスワードを作成するように要求します。

CFR 21 Part 11を実装する上で最も難しい部分は、要件を満たすためにプロジェクトが何をすべきかを適切な担当者に正確に教えてもらうことであり、コンプライアンスの検査を受けるには時間とコストがかかる可能性があります。

これがあなたが始めるのに役立つことを願っています。

于 2012-11-28T06:34:31.353 に答える
1

Django Reversionは、おそらくすべての機能を必要としない場合でも、監査証跡の開始を提供する可能性があります。

リストの2、3、および4の場合、これらはおそらく自分でコーディングすることになります。

于 2012-11-27T20:13:36.640 に答える