从UI存储登录用户详细信息并在BL方法中使用该详细信息

时间:2011-09-30 12:48:56

标签: c# security singleton

我在DocumentManagement System工作。数据库中定义的用户可以根据定义的访问权限创建/操作自己的文档。文档的所有者可以让其他用户访问/修改文档(存储为XML Contetnt)。我需要自动化LoggedIn用户每当打开文档进行编辑时。该文档已经提供了CreatedBy,EditingUser属性。

如果用户“A”拥有的文档可以由用户“B”编辑,如果他具有该文档的写入权限。现在我需要检查LoggedIn用户对打开以进行编辑的文档的授权(在DocumentManager对象的Save()BL方法内)。在这里,我需要访问BL方法中的LoggedIn用户详细信息,该方法在登录过程之后填充(之后不应更改)。

我的应用程序是WPF应用程序。那么处理这种情况的最佳方法是什么呢?我需要经常检查Loggedin用户在文件中的最右边(特别是在BL方法中)。

2 个答案:

答案 0 :(得分:1)

我宁愿建议一种解密机制来授权用户。因此实际应用程序无需担心授权。

您可以将授权逻辑定义为策略 - XACML。

XACML是授权的事实上的标准。

在XACML PDP中定义授权逻辑后 - 在执行用户操作之前,您的应用程序将调用XACML PDP - 并询问登录用户是否有资格对给定资源执行此操作。

使用XACML可以灵活地更改授权逻辑,甚至无需触及应用程序逻辑。

此外 - 您可以使用XACML定义非常精细的规则。

答案 1 :(得分:0)

您需要采用会话方法。您需要维护一个静态类,如下所示。当用户登录时,您需要将它们添加到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
}