gpt4 book ai didi

.net - ASP.NET 页面授权...你是怎么做的?

转载 作者:行者123 更新时间:2023-12-05 00:09:11 25 4
gpt4 key购买 nike

我目前正在研究 asp.net 中标准页面授权配置的替代解决方案。

如果您有需要相同访问策略的文件目录,则位置标签可以正常工作,但如果您有很多单独的访问策略,位置标签就很麻烦。我可以推出自己的自定义身份验证系统,但如果可以避免,那可能会更好。

目前,我们正在为页面内容使用类似 azman 的基于权限的授权系统,但我还没有找到将其与标准页面安全性集成的好方法。

关于如何做到这一点的任何建议?有没有集成azman和asp.net页面授权的解决方案?还有其他我应该知道的标准解决方案吗?

最佳答案

我在一个巨大的应用程序中做了很多不同的权限和不同的角色,如下所示[我没有这里的代码,所以我只是尝试在这里重新创建它]:

我首先实现了一个名为 SecuredPage 的类,如下所示:


public class SecuredPage : System.Web.UI.Page
{
// Those Permissions are mandatory, so user needs to have all of them
public List MandatoryPermissions { get; set; }

// Those Permissions are optional, so if the user have at least one of them, he can access
public List OptionalPermissions { get; set; }

protected override void OnLoad(EventArgs e)
{
MyUser loggedUser = (MyUser) this.User;

base.OnLoad(e);

foreach (Permission mandatoryPermission in MandatoryPermissions)
{
// if the user don't have permission, we can redirect him
if (!loggedUser.HasPermission(mandatoryPermission))
{
RedirectToDontHaveAccess();
break;
}
}

bool hasAccessToThePage = false;

foreach (Permission optionalPermission in OptionalPermissions)
{
// If the user has at least one of the permissions, he can access
if (loggedUser.HasPermission(optionalPermission))
{
hasAccessToThePage = true;
}
}

if (!hasAccessToThePage)
{
RedirectToDontHaveAccess();
}

}

private void RedirectToDontHaveAccess()
{
throw new NotImplementedException();
}
}

这将是用户需要访问权限的所有页面的 BasePage。 MandatoryPermissions是用户必须拥有所有权限才能访问页面和 OptionalPermissions是用户至少需要其中之一才能访问页面的权限。
如果您有 MandatoryPermissions,则无需在每个页面上都使用两者是否有选项并不重要。

权限是一个枚举:

public enum Permission
{
// Usually this enum will replicate a domain table from the database
EditUser = 1,
SearchUserByUsername = 2,
SearchUserByEmail = 3

}

MyUserMembershipUser 的实现:

public class MyUser : System.Web.Security.MembershipUser
{
internal bool HasPermission(Permission permission)
{
//
// TODO: Check on database if the user has the permission or not
//
}
}

然后,您需要在页面中做的唯一一件事就是填充权限列表:

public partial class EditUser : SecuredPage
{
protected void Page_Load(object sender, EventArgs e)
{
MandatoryPermissions.Add(Permission.EditUser);
}
}

public partial class SearchUser : SecuredPage
{
protected void Page_Load(object sender, EventArgs e)
{
OptionalPermissions.Add(Permission.SearchUserByUsername);
OptionalPermissions.Add(Permission.SearchUserByEmail);
}
}

好的,搜索示例不是那么好,但我想您已经了解了。

整个想法是 base.OnLoad(e);在权限验证之前调用,所以你只需要在你的 Page_Load中填写权限.

我不确定这是否是最好的解决方案,但我确定它有很大帮助:)

关于.net - ASP.NET 页面授权...你是怎么做的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/787729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com