加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET页面授权……你是怎么做到的?

发布时间:2020-12-16 06:51:35 所属栏目:asp.Net 来源:网络整理
导读:我目前正在研究asp.net中标准页面授权配置的替代解决方案. 如果您的文件目录需要相同的访问策略,但是如果您有许多单独的访问策略,则位置标记很难处理.我可以滚动我自己的自定义身份验证系统,但如果可以避免那可能更好. 目前我们正在为页面内容使用类似azman
我目前正在研究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

}

而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
        //
    }
}

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

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中的权限.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读