ASP.NET Identity “角色-許可權”管理 8

來源:互聯網
上載者:User

標籤:

1.       典型應用情境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());

ASP.NET Identity “角色-許可權”管理 8

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.