sqlserver 用户权限管理,LINQ去除它的重复菜单项

事情是这样的,我有三张表,用户_角色关系表User_Role,角色_菜单关系表Role_Menu和菜单表

Menu,这三个表之间有如下关系:
User_Role=>RoleId=>RoleMenu
RoleMenu=>MenuId=>Menu
它们之间的业务关系是:
当用户登陆后,通过UserId得到User_Role列表,将用户所包括的角色得出
通过User_Role找到所有对应Menu
现在有个问题,就是一个用户可以有多少角色,一个角色有多个菜单,当然,两个不同的角色可以有相当的菜单项,这时,就出现一个问题,用户在“管理员”这个角色里有“文件”这个菜单,同时它在“新闻管理员”这个角色里也有“文件”这个菜单,这样返回就会出现两个完成相同的”文件“菜单,下面,我使用匿名类和distinct方法来解决这个问题,代码如下:
代码如下:
class Program
{
static void Main(string[] args)
{
#region 实体列表初始化
List userRole = new List
{
new User_Role(“01”,1),
new User_Role(“01”,2),
new User_Role(“02”,1),
};
List roleMenu = new List
{
new Role_Menu(2,3),
new Role_Menu(1,1),
new Role_Menu(1,2),
new Role_Menu(2,1),
new Role_Menu(2,2),
};
List

menu = new List

{
new Menu(1,”编辑”,2),
new Menu(2,”文件”,1),
new Menu(3,”视图”,3),
new Menu(4,”系统”,4),
};
#endregion
var linq = from data1 in userRole
join data2 in roleMenu on data1.RoleId equals data2.RoleId
join data3 in menu on data2.MenuId equals data3.MenuId
where data1.UserId.Equals(“01”)
select new
{
UserId = data1.UserId,
MenuId = data2.MenuId,
Menu = data3,
};
linq.Distinct().OrderBy(i => i.Menu.OrderNumber).ToList()
.ForEach(i => Console.WriteLine(“用户ID:{0},菜单ID{1},菜单名:{2}”
, i.UserId, i.MenuId, i.Menu.MenuName));
Console.ReadKey();
}
}
#region 实体对象
class User_Role
{
public string UserId { get; set; }
public int RoleId { get; set; }
public User_Role(string userId, int roleId)
{
this.RoleId = roleId;
this.UserId = userId;
}
}
class Menu
{
public int MenuId { get; set; }
public string MenuName { get; set; }
public int OrderNumber { get; set; }
public Menu(int menuId, string menuName, int orderNumber)
{
this.MenuId = menuId;
this.MenuName = menuName;
this.OrderNumber = orderNumber;
}
}
class Role_Menu
{
public int RoleId { get; set; }
public int MenuId { get; set; }
public Role_Menu(int roleId, int menuId)
{
this.RoleId = roleId;
this.MenuId = menuId;
}
}
#endregion

这样的结果是我希望看到的:

降重鸟 降重鸟

要想效果好,就用降重鸟。AI改写智能降低AIGC率和重复率。

降重鸟 113 查看详情 降重鸟

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/449804.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WPS演示一键简繁转换
上一篇 2025年11月7日 22:34:29
Meta Quest Pro头显升级,增加舌头追踪功能,提升VR社交的真实感
下一篇 2025年11月7日 22:34:34

相关推荐

  • mysql如何配置临时文件权限

    通过设置tmpdir指定专用目录并配置系统权限为700,结合文件系统安全挂载选项与MySQL用户权限控制,可有效保障MySQL临时文件安全性。 MySQL 本身不直接提供配置“临时文件权限”的参数,但可以通过操作系统层面和 MySQL 相关配置共同控制临时文件的创建位置与访问权限,确保安全性。关键在…

    2026年9月20日
    000
  • Linux如何创建和管理用户账户

    Linux如何创建和管理用户账户Linux如何创建和管理用户账户Linux如何创建和管理用户账户Linux如何创建和管理用户账户

    Linux用户管理核心在于权限控制与安全策略,通过useradd、usermod、userdel等命令实现用户生命周期管理,结合UGO-rwx权限模型和SUID、SGID、Sticky Bit特殊权限位,构建精细的访问控制体系。 Linux用户账户的管理,在我看来,远不止敲几个命令那么简单,它更像是…

    2026年9月12日 用户投稿
    100
  • 如何在Laravel中使用原生SQL查询

    在laravel中执行原生sql查询主要通过db facade的select、insert、update、delete和statement方法实现。1. 查询使用db::select(),支持问号或命名占位符绑定参数以防止sql注入;2. 插入使用db::insert(),返回布尔值表示操作是否成功…

    2026年9月12日
    100
  • mysql用户权限如何管理_PHP中管理mysql用户权限的实现

    MySQL用户权限管理通过GRANT、REVOKE等命令实现,PHP中可用mysqli或PDO执行相应SQL;用户由用户名和主机名组成,权限分全局、数据库、表层级,常用权限包括SELECT、INSERT等;创建用户用CREATE USER,删除用DROP USER,授权使用GRANT并配合FLUSH…

    2026年9月11日
    200
  • Pboot插件用户权限管理的设置_Pboot插件权限组的分配方法

    首先创建自定义权限组并命名,接着为用户分配指定权限组以实现精细化控制,然后在插件管理中设置插件级独立权限,最后可通过批量操作统一调整多个用户权限组。 如果您在使用Pboot插件时需要对不同用户设置访问和操作权限,可能是因为系统默认权限过于宽松或不符合团队分工需求。通过合理配置权限组,可以有效控制用户…

    2026年9月9日
    200
  • Linux最小权限原则实践指南

    最小权限原则要求用户和进程仅拥有必要权限。创建独立账户、限制sudo权限、设置专用服务账户并禁用登录;合理配置文件权限如600/750,禁用全局可写;服务以非root用户运行,通过systemd指定User/Group;利用sudo精细化授权,记录操作日志;需定期审计与监控,结合AIDE、audit…

    2026年9月8日
    000
  • mysql中如何限制存储过程执行权限

    答案:通过GRANT和REVOKE EXECUTE权限可控制用户对MySQL存储过程的执行权限。1. 使用GRANT EXECUTE ON PROCEDURE授予特定用户调用权限;2. 用REVOKE EXECUTE撤销权限;3. 权限可设于单个过程或整个数据库;4. 通过SHOW GRANTS验证…

    2026年9月8日
    100
  • 如何利用Laravel实现用户权限管理功能

    如何利用Laravel实现用户权限管理功能 随着Web应用程序的发展,用户权限管理在许多项目中变得越来越重要。Laravel作为流行的PHP框架,为处理用户权限管理提供了许多强大的工具和功能。本文将介绍如何使用Laravel实现用户权限管理功能,并提供具体的代码示例。 数据库设计 首先,我们需要设计…

    2026年9月2日
    100
  • 如何解决PHP项目中的用户认证和授权问题?使用Nette/Security库可以!

    可以通过一下地址学习composer:学习地址 在开发一个php项目时,用户认证和授权是一个不可避免的问题。我的项目需要用户能够登录、注销,并根据不同的角色分配不同的权限。最初,我尝试了手动编写代码来实现这些功能,但很快发现这不仅复杂,而且容易出错。幸运的是,我找到了nette/security库,…

    用户投稿 2026年8月31日
    100
  • RuoYi框架代码生成器如何适配SQL Server数据库?

    RuoYi-SQLServer 代码生成器适配:从 MySQL 到 SQL Server 的迁移 ruoyi框架的sqlserver版本(ruoyi-sqlserver)原本只支持mysql数据库的代码自动生成功能,现在需要将其扩展到sql server。这篇文章将探讨如何修改代码,实现sql se…

    用户投稿 2026年8月28日
    200
  • JavaScript设计模式在大型项目中的应用

    答案:文章介绍了JavaScript设计模式在大型项目中的应用,包括模块模式封装私有状态、观察者模式解耦事件通信、单例模式确保全局唯一实例、策略模式动态切换行为逻辑,并强调应根据场景合理选用以提升代码质量。 在大型项目中,JavaScript设计模式能有效提升代码的可维护性、可扩展性和团队协作效率。…

    2025年12月20日
    000
  • 在Angular服务中调用Service Worker推送通知的全面指南

    本教程详细阐述如何在Angular应用中通过自定义服务触发Service Worker推送通知。内容涵盖Service Worker的注册、权限请求、与Service Worker的通信机制,并通过具体代码示例演示如何从Angular服务中调用showNotification()方法,从而实现客户端…

    2025年12月20日
    200
  • Angular应用中通过自定义服务调用Service Worker推送通知

    本文详细阐述了如何在angular应用中利用自定义服务与service worker通信,进而触发本地推送通知。内容涵盖service worker的注册与配置、在angular服务中请求通知权限、获取service worker注册对象以及调用`shownotification()`方法显示通知的…

    2025年12月20日
    000
  • 如何利用JavaScript的Map和Set实现数据去重和关联存储,以及它们与对象和数组的性能对比?

    答案是Map和Set在处理非字符串键、对象引用唯一性及大数据量去重时具有显著优势。它们支持任意类型键(Map)或元素(Set),基于引用比较实现高效去重(Set)和复杂关联存储(Map),内部采用哈希结构使查找、插入、删除操作平均时间复杂度为O(1),远优于数组遍历的O(n)。尤其在大规模数据去重或…

    2025年12月20日
    000
  • javascript如何实现数组对称差

    javascript如何实现数组对称差javascript如何实现数组对称差javascript如何实现数组对称差javascript如何实现数组对称差

    数组对称差是指两个数组中仅存在于其中一个数组的元素集合,其数学定义为 (a b) ∪ (b a)。1. 对于原始数据类型,可通过将数组转换为 set,利用 set 的 o(1) 查找特性,分别过滤出对方 set 中不存在的元素,再合并结果,时间复杂度为 o(n + m)。2. 对于对象等复杂类型,因…

    2025年12月20日 用户投稿
    100
  • BOM中如何检测用户的摄像头扫描支持?

    BOM中如何检测用户的摄像头扫描支持?BOM中如何检测用户的摄像头扫描支持?BOM中如何检测用户的摄像头扫描支持?BOM中如何检测用户的摄像头扫描支持?

    要检测用户的摄像头扫描支持,核心在于使用navigator.mediadevices.getusermedia() api。①首先检查该api是否存在;②若存在,则尝试请求视频流以确认浏览器被允许访问摄像头且系统支持访问;③成功获取流表示摄像头可用,可进行扫描;④若失败,根据错误类型(如notall…

    2025年12月20日 用户投稿
    100
  • BOM中如何检测用户的摄像头和麦克风?

    BOM中如何检测用户的摄像头和麦克风?BOM中如何检测用户的摄像头和麦克风?BOM中如何检测用户的摄像头和麦克风?BOM中如何检测用户的摄像头和麦克风?

    用户如何授权或拒绝摄像头和麦克风访问?用户通过浏览器弹出的权限提示框进行授权或拒绝。1. 允许:用户点击“允许”,浏览器记住该选择,媒体流被传递给网页;2. 拒绝:用户点击“拒绝”或忽略提示,promise被拒绝并抛出notallowederror,浏览器通常不再弹出提示;3. 忽略/关闭:多数浏览…

    2025年12月20日 用户投稿
    000
  • 什么是JavaScript中的策略模式?

    策略模式在javascript中是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法独立于使用它的客户端而变化。具体应用如下:1.定义不同的策略,如计算不同会员等级的订单总价;2.使用策略模式可以动态选择和改变对象的行为,适用于需要频繁修改或扩展的功能;…

    2025年12月20日
    000
  • 用户权限管理中如何实现数据源的动态选择?

    用户权限管理中的数据源选择 在权限控制系统中,我们需要根据不同的用户权限展示不同的数据。例如,具有root权限的用户可以看到所有单位列表,而具有admin权限的用户只能看到自己所在的单位列表。 对于此类需求,通常不应该在前端写权限逻辑。而是要从后端获取根据角色返回的不同数据源。 具体而言,后端可以使…

    2025年12月19日
    100
  • 如何用C++实现桥接模式 抽象与实现分离设计方案

    如何用C++实现桥接模式 抽象与实现分离设计方案如何用C++实现桥接模式 抽象与实现分离设计方案如何用C++实现桥接模式 抽象与实现分离设计方案如何用C++实现桥接模式 抽象与实现分离设计方案

    c++++中桥接模式的核心优势在于解耦抽象与实现,使其能独立变化。1. 它通过将一个类中可能变动的具体操作抽离为独立的实现体系,降低类组合数量,避免“m x n”组合爆炸;2. 抽象类(如shape)包含指向实现接口的指针或引用,调用具体实现(如drawingapi),使两者互不影响;3. 适用于多…

    2025年12月18日 用户投稿
    700

发表回复

登录后才能评论
关注微信