ASP.Net MVC 按身份过滤
ASP.Net MVC Filter by Identity
我喜欢使用 ASP.Net 身份(角色)来过滤实体。我使用 ASP.NET 4.5 MCV EF6。
我的表是:
- 导航(NavigationId、NavName 等)
- NavigationRoles(NavigationId、RoleId、BlogRigth)
我在导航中对一个角色的筛选是:
var Nav= db.Navigations
.Join(db.NavigationRoles
,n => n.NavigationId
,nr =>nr.NavigationId
,(n ,nr) => new { n , nr })
.Where(x => x.nr.RoleId.Equals("dbd7d691-......"))
.Where(x => x.n.ParentId==1)
.Select(x=> x.n )
.Distinct()
.ToList() ;
我的用户可以有一组角色,所以我喜欢按这些集合进行过滤。
我通过以下方式收集角色:
var UserRoleIDs = UserManager.FindById(UserId).Roles.Select(ri=> ri.RoleId);
我怎样才能很好地链接这些?
总的来说,我对 LINQ、Lambda 和 MVC 还是个新手。如果有人有办法改进此代码,请随时添加您的意见。
这里的技巧是在用户角色列表中使用 Contains()。这是您的实体的示例。
var UserRoleIDs = UserManager.FindById(UserId).Roles.Select(ri => ri.RoleId);
var query = from navRoles in db.NavigationRoles
join nav in db.Navigations on navRoles.NavigationId equals nav.NavigationId
where UserRoleIDs.Contains(navRoles.RoleId)
select nav;
var distinct = query.Distinct().ToList();
我没有使用过 LINQ express,因为我发现在涉及连接时编写 lambda 表达式要容易得多。
希望对您有所帮助!
我喜欢使用 ASP.Net 身份(角色)来过滤实体。我使用 ASP.NET 4.5 MCV EF6。
我的表是:
- 导航(NavigationId、NavName 等)
- NavigationRoles(NavigationId、RoleId、BlogRigth)
我在导航中对一个角色的筛选是:
var Nav= db.Navigations
.Join(db.NavigationRoles
,n => n.NavigationId
,nr =>nr.NavigationId
,(n ,nr) => new { n , nr })
.Where(x => x.nr.RoleId.Equals("dbd7d691-......"))
.Where(x => x.n.ParentId==1)
.Select(x=> x.n )
.Distinct()
.ToList() ;
我的用户可以有一组角色,所以我喜欢按这些集合进行过滤。 我通过以下方式收集角色:
var UserRoleIDs = UserManager.FindById(UserId).Roles.Select(ri=> ri.RoleId);
我怎样才能很好地链接这些?
总的来说,我对 LINQ、Lambda 和 MVC 还是个新手。如果有人有办法改进此代码,请随时添加您的意见。
这里的技巧是在用户角色列表中使用 Contains()。这是您的实体的示例。
var UserRoleIDs = UserManager.FindById(UserId).Roles.Select(ri => ri.RoleId);
var query = from navRoles in db.NavigationRoles
join nav in db.Navigations on navRoles.NavigationId equals nav.NavigationId
where UserRoleIDs.Contains(navRoles.RoleId)
select nav;
var distinct = query.Distinct().ToList();
我没有使用过 LINQ express,因为我发现在涉及连接时编写 lambda 表达式要容易得多。
希望对您有所帮助!