• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETIdentity“角色-权限”管理8

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.1.       EF数据存储

EF的核心是数据上下文DbContext,它提供了基本的数据存储操作方法。

1.1.1.      新增

采用添加对象的方式。

//创建权限

var permission = new ApplicationPermission

{

    Id = item.Id,

    Action = item.Action,

    Controller = item.Controller,

    Description = item.Description

};

_db.Permissions.Add(permission);

//保存

await _db.SaveChangesAsync();

 

1.1.2.      修改

    采用修改实体状态的方式。

_db.Entry(applicationPermission).State = EntityState.Modified;

_db.SaveChanges();

 

1.1.3.      删除

    采用移除对象的方式。

ApplicationPermission applicationPermission = _db.Permissions.Find(id);

_db.Permissions.Remove(applicationPermission);

_db.SaveChanges();

采用修改实体状态的方式。

//删除Permission

var entity = new ApplicationRolePermission { RoleId = roleId, PermissionId = permissionId };

_db.Set<ApplicationRolePermission>().Attach(entity);

_db.Entry(entity).State = EntityState.Deleted;

 

var result = await _db.SaveChangesAsync();

 

1.1.4.      查询

示例项目中的部分代码。

//取数据上下文

var context = HttpContext.Current.GetOwinContext().Get<ApplicationDbContext>();

//取角色

var role = context.Roles.Include(r => r.Permissions).FirstOrDefault(t => t.Id == roleId);

//取权限ID列表       

var rolePermissionIds = role.Permissions.Select(t => t.PermissionId);

//取权限列表

permissions = context.Permissions.Where(p => rolePermissionIds.Contains(p.Id)).ToList();

var permissions = await _db.Permissions.ToListAsync();

ApplicationPermission applicationPermission = _db.Permissions.Find(id);

 

 

1.2.       自定义比较器

1.2.1.      相等比较IEqualityComparer

ApplicationPermission对象是否相等需要依次比较Controller、Action和Description,属于自定义规则,为此比较器要实现相等比较接口IEqualityComparer。

public class ApplicationPermissionEqualityComparer : IEqualityComparer<ApplicationPermission>

{

    public bool Equals(ApplicationPermission x, ApplicationPermission y)

    {

        //先比较ID

        if (string.Compare(x.Id, y.Id, true) == 0)

        {

            return true;

        }

        //而后比较Controller,Action,Description和Params

        if (x.Controller == y.Controller || x.Action == y.Action || x.Description == y.Description )

        {

            return true;

        }

        else

        {

            return false;

        }

    }

 

    public int GetHashCode(ApplicationPermission obj)

    {

        var str = string.Format("{0}-{1}-{2}", obj.Controller, obj.Action, obj.Description);

        return str.GetHashCode();

    }

}

在Contains中使用比较器。

//是否授权

if (rolePermissions.Contains(action, new ApplicationPermissionEqualityComparer()))

{

    return true;

}

else

{

    return false;

}

在Except中使用比较器。

//取程序集中权限

var allPermissions = _permissionsOfAssembly;

//取数据库已有权限

var dbPermissions = _db.Permissions.ToList();

//取两者差集

var permissions = allPermissions.Except(dbPermissions, new ApplicationPermissionEqualityComparer());

 

1.2.2.      大小比较IComparer

PermissionViewModel需要按Controller、Action进行排序,属于自定义规则,为此比较器要实现大小比较接口IComparer。

public class PermissionViewModelComparer : IComparer<PermissionViewModel>

{

    public int Compare(PermissionViewModel x, PermissionViewModel y)

    {

        //id相同,则相等

        if (string.Compare(x.Id, y.Id, true) == 0)

        {

            return 0;

        }

        //controller比较

        var controllerCompareResult = string.Compare(x.Controller, y.Controller, true);

        //action比较

        var actionCompareResult = string.Compare(x.Action, y.Action, true);

        //先比较controller,后比较action

        if (controllerCompareResult != 0)

        {

            return controllerCompareResult;

        }

        else

        {

            return actionCompareResult;

        }

    }

}

使用比较器。

//排序

permissionViews.Sort(new PermissionViewModelComparer());


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用AJAX和ASP.NET来制作DropDownList发布时间:2022-07-10
下一篇:
ASP.NET 2.0打造购物车和支付系统之 一发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap