我想在ASP.NET Boilerplate框架中添加4眼原则。这意味着在应用于系统之前,角色,用户等的每个更改都需要(由另一个管理员)批准。我搜索了一段时间但没有回答。那么这个流程的最佳解决方案是什么?
我可以使用Abp表(dbo.AbpUser_Temp
等)创建相同的表,并且所有更改都将存储在这些表中吗?有没有更好的解决方案?
示例:在应用程序中,Admin1创建了一个名为User1的用户。但是,在Admin2批准之前,此用户无法登录该应用程序。
答案 0 :(得分:7)
示例:在应用程序中,Admin1创建了一个名为User1的用户。但是,在Admin2批准之前,此用户无法登录该应用程序。
这些简单的工作流程可以通过属性和方法适当地处理:
["test","test2"]
像“每次更改”这样的复杂工作流程可以执行此操作而不是public class User : AbpUser<User>
{
public bool IsApproved { get; set; }
public void Approve(User approver)
{
if (approver.Id != CreatorUserId)
{
IsApproved = true;
}
}
}
表:
_Temp
用法:
public abstract class ChangeBase : Entity<long>, IExtendableObject
{
public string EntityTypeAssemblyQualifiedName { get; set; }
public string EntityIdJsonString { get; set; }
public long ProposerUserId { get; set; }
public long? ApproverUserId { get; set; }
public string ExtensionData { get; set; }
}
public class Change : ChangeBase
{
[NotMapped]
public Type EntityType => Type.GetType(EntityTypeAssemblyQualifiedName);
[NotMapped]
public object EntityId => JsonConvert.DeserializeObject(EntityIdJsonString, EntityHelper.GetPrimaryKeyType(EntityType));
[NotMapped]
public bool IsApproved => ApproverUserId.HasValue && ApproverUserId != ProposerUserId;
[NotMapped]
public IDictionary<string, string> ChangedPropertyValuePairs => JObject.Parse(ExtensionData).ToObject<Dictionary<string, string>>();
public Change(EntityIdentifier changedEntityIdentifier, long proposerUserId, IDictionary<string, string> changedPropertyValuePairs)
{
EntityTypeAssemblyQualifiedName = changedEntityIdentifier.Type.AssemblyQualifiedName;
EntityIdJsonString = changedEntityIdentifier.Id.ToJsonString();
ProposerUserId = proposerUserId;
ExtensionData = JObject.FromObject(changedPropertyValuePairs).ToString(Formatting.None);
}
public bool Approve(long approverUserId)
{
if (approverUserId != ProposerUserId)
{
ApproverUserId = approverUserId;
return true;
}
return false;
}
}
答案 1 :(得分:2)
发展
由于ASP.NET Boilerplate框架包含Entity Framework。您还可以利用迁移。
我希望有所帮助。
申请流程
可能有很多方法可以实际实现这一点,所以我将介绍一个简单的方法,让您的想法流畅,但请记住:实现两个人完整性所需的方式必须符合你的操作程序应该有效,而不是相反。开发不会推动业务运营,业务用例推动开发。
扩展现有的30 * 24 * 3600
课程。示例:Identity*
类(可能以不同的名称命名,但它派生自ApplicationUser
IdentityUser
表中,也可以创建新表Abp*
已识别并注册,但无法登录。管理员同时切换标志后,将用户default IdentityUserRole
提升为允许登录的角色