我有一个要求,只有超级管理员才能修改“实时”数据。
目前,如果一个普通管理员想要更改实时数据:-
。
如果我想要消除步骤1,并让旧数据在超级用户批准更改之前保持活动,我的选择是什么?
我使用的是ASP.NET MVC和EF4,所以我特别感兴趣的是围绕EF的解决方案,这些解决方案可以对我的控制器透明,但是我也有兴趣在数据库层(或完全不同的上下文中)了解解决方案。
发布于 2011-06-21 12:40:05
首先,由于您讨论的是基于角色的活动,我发现很难找到一个不涉及应用程序/业务层的适当解决方案。我相信您的数据访问层应该忽略这样一个事实,即超级管理员或普通管理员正在调用其方法。
在任何情况下,处理此问题的一种方法是创建一个PendingChanges表,并将普通管理员的更改保存到该表,并使用一个标志指示它正在等待批准。然后,一旦超级管理员批准了它,就可以将记录从PendingChanges复制到活动表中。
发布于 2011-06-23 19:05:43
我将尝试给出一个简单的对象图示例。
考虑一个具有以下结构的博客。
Posts
PostID
Title
Description
PostUpdates
PostUpdateID
PostID
Title
Description
DateUpdated
UpdatedBy
ApprovedBy
PostStatus(Approved/Rejected)在这里,我的逻辑将是显示Post和它的最后更新和批准的PostUpdate。在这种情况下,实际上没有任何东西被修改过。总是追加一组新的更改,您可以决定删除旧版本。
对于保存,您可以在PostUpdate中添加一个新的PostUpdates条目。
对于超级管理员,您可以显示所有更新并让他批准正确的更新。当管理员决定批准更新时,Post将使用上一次批准的PostUpdate的内容进行修改。
另一种选择(更通用)
您可以如下所示创建一个表
RowUpdates
RowUpdateID
TableName
TableKey
NewValues (kind of XML store to save which fields were modified)
UpdatedBy
ApprovedBy
DateUpdated
UpdateStatus (Approved/Rejected)但是在这种情况下,您必须使用反射来避免将值存储到DB,而是创建新的RowUpdate条目,并且只有当管理员批准时,实际值才应该在执行反射映射后发布到db。
https://stackoverflow.com/questions/6425272
复制相似问题