Joh*_*esH 4 .net asp.net security authorization
我目前正在研究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();
}
}
Run Code Online (Sandbox Code Playgroud)
对于用户需要访问权限的所有页面,这将是我的BasePage.该MandatoryPermissions
是用户必须拥有所有这些访问页面和权限OptionalPermissions
的权限用户需要它们中至少有一个要访问的网页.没有必要在每个页面上同时使用这两个页面,因为如果你有选择权MandatoryPermissions
,那么无关紧要.
许可是一个枚举:
public enum Permission
{
// Usually this enum will replicate a domain table from the database
EditUser = 1,
SearchUserByUsername = 2,
SearchUserByEmail = 3
}
Run Code Online (Sandbox Code Playgroud)
并且MyUser
是一个实现MembershipUser
:
public class MyUser : System.Web.Security.MembershipUser
{
internal bool HasPermission(Permission permission)
{
//
// TODO: Check on database if the user has the permission or not
//
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您在页面中唯一需要做的就是填充权限列表:
public partial class EditUser : SecuredPage
{
protected void Page_Load(object sender, EventArgs e)
{
MandatoryPermissions.Add(Permission.EditUser);
}
}
Run Code Online (Sandbox Code Playgroud)
public partial class SearchUser : SecuredPage
{
protected void Page_Load(object sender, EventArgs e)
{
OptionalPermissions.Add(Permission.SearchUserByUsername);
OptionalPermissions.Add(Permission.SearchUserByEmail);
}
}
Run Code Online (Sandbox Code Playgroud)
好的,搜索示例不是那么好,但我认为你得到了图片.
整个想法是base.OnLoad(e);
在权限验证之前调用,所以你只需要填写你的权限Page_Load
.
我不确定这是否是最佳解决方案,但我确信它有很大帮助:)