C# 从UI存储Loggedin用户详细信息并在BL方法中使用
我在一个文档管理系统中工作。数据库中定义的用户可以根据定义的访问权限创建/操作自己的文档。文档的所有者可以让其他用户访问/修改文档(存储为XML内容)。每当打开文档进行编辑时,我需要自动调整LoggedIn用户的大小。该文档已由CreatedBy、EditingUser属性创建 如果用户“a”拥有文档的写入权限,则用户“B”可能会编辑用户“a”拥有的文档。现在我需要检查LoggedIn用户对打开进行编辑的文档的授权(在DocumentManager对象的Save()BL方法中)。在这里,我需要访问BL方法中的LoggedIn用户详细信息,该信息在登录过程后填写(之后不应更改)C# 从UI存储Loggedin用户详细信息并在BL方法中使用,c#,security,singleton,C#,Security,Singleton,我在一个文档管理系统中工作。数据库中定义的用户可以根据定义的访问权限创建/操作自己的文档。文档的所有者可以让其他用户访问/修改文档(存储为XML内容)。每当打开文档进行编辑时,我需要自动调整LoggedIn用户的大小。该文档已由CreatedBy、EditingUser属性创建 如果用户“a”拥有文档的写入权限,则用户“B”可能会编辑用户“a”拥有的文档。现在我需要检查LoggedIn用户对打开进行编辑的文档的授权(在DocumentManager对象的Save()BL方法中)。在这里,我需要访
我的应用程序是WPF应用程序。那么,处理这种情况的最佳方法是什么呢。我需要经常针对我的应用程序中的文档检查Loggedin用户的最右边(特别是在BL方法中)。您需要采用会话方法。您需要维护一个静态类,如下所示。当任何用户登录时,您都需要将其添加到BLL上的列表中
public static class Session{
public static Dictionary<User, DateTime> loggedInUser;
public static Add(User user){
loggedInUser.Add(user, DateTime.Now);
// raise event user arrival
}
public static GetUser(int Id){
// fetch user;
}
public static Remove(User user){
loggedInUser.Removed(user);
// raise event user left
}
// TODO: add timer to check itself. If not activity done in past n minutes,
//log him out
}
公共静态类会话{
公共静态字典loggedInUser;
公共静态添加(用户){
添加(user,DateTime.Now);
//引发事件用户到达
}
公共静态GetUser(int-Id){
//获取用户;
}
公共静态删除(用户){
loggedInUser.Removed(用户);
//向左引发事件用户
}
//TODO:添加计时器以检查自身。如果不是在过去n分钟内完成的活动,
//把他注销
}
您需要采取会话方法。您需要维护一个静态类,如下所示。当任何用户登录时,您都需要将其添加到BLL上的列表中
public static class Session{
public static Dictionary<User, DateTime> loggedInUser;
public static Add(User user){
loggedInUser.Add(user, DateTime.Now);
// raise event user arrival
}
public static GetUser(int Id){
// fetch user;
}
public static Remove(User user){
loggedInUser.Removed(user);
// raise event user left
}
// TODO: add timer to check itself. If not activity done in past n minutes,
//log him out
}
公共静态类会话{
公共静态字典loggedInUser;
公共静态添加(用户){
添加(user,DateTime.Now);
//引发事件用户到达
}
公共静态GetUser(int-Id){
//获取用户;
}
公共静态删除(用户){
loggedInUser.Removed(用户);
//向左引发事件用户
}
//TODO:添加计时器以检查自身。如果不是在过去n分钟内完成的活动,
//把他注销
}
我宁愿建议一种解耦机制来授权用户。因此,实际应用不需要担心授权问题
您可以使用策略XACML定义授权逻辑
XACML是事实上的授权标准
一旦在XACML PDP中定义了授权逻辑—在执行用户操作之前,应用程序将调用XACML PDP—并询问登录用户是否有资格对给定资源执行此操作
使用XACML将使您能够灵活地更改授权逻辑,甚至不必触及应用程序逻辑
另外,您可以使用XACML定义非常细粒度的规则。我更愿意建议一种解耦机制来授权用户。因此,实际应用不需要担心授权问题 您可以使用策略XACML定义授权逻辑 XACML是事实上的授权标准 一旦在XACML PDP中定义了授权逻辑—在执行用户操作之前,应用程序将调用XACML PDP—并询问登录用户是否有资格对给定资源执行此操作 使用XACML将使您能够灵活地更改授权逻辑,甚至不必触及应用程序逻辑 此外,您还可以使用XACML定义非常细粒度的规则