【问题标题】:Django and CFR 21 Part 11Django 和 CFR 21 第 11 部分
【发布时间】:2012-11-19 11:54:50
【问题描述】:

我必须转换我的 Django 应用程序,使其符合“21 CFR Part 11”,即使电子记录与签名的纸质记录具有相同的有效性。有什么项目或应用我应该看看吗?

一些问题:

  1. 审计跟踪:必须跟踪所选模型的每一次更改(谁、何时、什么)
  2. 检测未经授权的记录编辑:如果记录在正常程序之外被更改/添加/删除,应用程序应检测它
  3. 对于特定操作,用户必须再次输入密码
  4. 密码必须定期更改并且必须满足某些条件 等等……

我在网上没有找到现成的解决方案...

【问题讨论】:

  • 我认为您应该寻找更通用的东西。用python 标记您的问题,并将您的搜索重点放在python 库上。我们喜欢 django 是因为 python,而不是其他原因。
  • 有一些应用程序可以让 Django 进行审计跟踪,您可以使用这些应用程序,但您应该在问题中列出“21 CFR Part 11”的所有具体要求,以便人们更容易回答。

标签: python django password-protection corrupt-data 21cfr11


【解决方案1】:

我在需要 CFR 21 Part 11 和类似标准的环境中工作。我还没有让我们的应用完全合规,但我已经经历了许多试验和错误,因此我可以帮助您从几个地方开始。

1) 我还建议 Django 回归;但是,您将需要比它提供的更多的东西来实现可变级别的审计跟踪以及所采取的行动(除了由谁和何时)。为此,我使用了一个反转信号将注释字段转换为可以评估的字典,然后调用该行中的任何变量以及对其采取的操作等。如下:

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 第 11 部分最困难的部分是让适当的人员准确地告诉您您的项目应该做什么才能满足要求,并且接受合规性检查可能既费时又费钱。

希望这可以帮助您入门。

【讨论】:

  • 对于第 2 点,我的意思是应用程序应该检测是否在应用程序本身之外更改了记录(例如,使用其他工具访问数据库)。您对此有什么建议吗?
【解决方案2】:

Django Reversion 可能会让您开始进行审计跟踪,尽管您可能不需要它的所有设施。

对于您列表中的 2、3 和 4,您最有可能最终自己编写代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2013-10-20
    • 2018-11-13
    • 1970-01-01
    • 2015-07-07
    相关资源
    最近更新 更多