在ASP.NET Web App中实现安全性是事后的想法

时间:2012-06-04 11:10:10

标签: asp.net sql-server-2008 security sql-server-ce

与许多真实世界的应用程序一样,安全性(登录/密码)就是授予/拒绝访问整个应用程序的权限。现在客户端要求细粒度的安全性,比如一些网页应该只能查看,有些用户可以删除其他不能等。 基本上客户端正在请求以下内容。

有效权限::用户 - >网页 - >访问类型(查看,创建/编辑,删除)

申请详情

  • ASP.NET/C#
  • MSSQL Server 2008 for Biz数据
  • 用户/密码/个人资料/日志的SQLCE
  • Ext.net for main UI

我们讨论过,最好是增强 security.sdf 文件并拥有一个用于屏幕(网页)的表格和一个用户+屏幕的连接表+一个表示访问类型的数字,即< / p>

  • 1:阅读
  • 2:写
  • 4:删除

可以使用按位运算符检查这些。该应用程序使用ASP.NET模拟来访问MSSQL2008

问题是如何在Web应用程序中实现它?

如果有人有更好的想法请分享!!!

1 个答案:

答案 0 :(得分:3)

您可以使用IsInRole功能并将用户分类为角色。每个角色都可以执行一些只能执行的操作。因此,通过询问女巫角色是用户,你可以让他做或不做。

HttpContext.Current.User.IsInRole("Role")

或者您可以反向执行,询问此操作是否适用于此角色,这是一个简单的对象,具有权限和检查。

public enum csPermissions
{
    pActionDelete = 1,   
    pActionEdit = 2 , 
    // more names...
}

private int[] AdminPermission = { 
    (int)csPermissions.pActionEdit, 
    (int)csPermissions.pActionDelete, 
    // more permissions...
};

private int[] BackOfficePermission = { 
    (int)csPermissions.pActionEdit, 
    // more permissions...
}; 

public static bool IsThisAllowed(csPermissions AskPermitForThisAction)
{
    // questions here for all users roles...
    // here is only an example 
    if (HttpContext.Current.User.IsInRole("Administator")))
    {
        for (int i = 0; i < AdminPermission.Length; i++)
            if (AdminPermission[i] == (int)AskPermitForThisAction)
                return true;
    } 

    // no permission found  
    return false;
 }