仓库管理系统26--权限设置
原创不易,打字不易,截图不易,多多点赞,送人玫瑰,留有余香,财务自由明日实现
1、权限概述
在应用软件中,通常将软件的功能分为若干个子程序,通过主程序调用。那么,通过众多客户来说,如果设置各人的权限呢?软件系统的权限控制几乎是非常常见且必备的,这篇文章整理下常见的九种模型,几乎基本够你用了,主流的权限模型主要有以下9种:
1、ACL模型
访问控制列表
2、DAC模型
自主访问控制
3、MAC模型
强制访问控制
4、ABAC模型
基于属性的访问控制,更灵活复杂
5、RBAC模型
基于角色的权限访问控制,最常用
6、TBAC模型
基于任务和工作流的访问控制
7、T-RBAC模型
基于任务和角色的访问控制
8、OBAC模型
基于对象的访问控制
9、UCON模型
使用控制模型
2、权限实现
本项目没有采用复杂的权限管理,只采用最简单的操作方法,具体是根据不同角色隐藏或显示菜单,具体实现方法是:
1)创建转换器对象
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;namespace West.StoreMgr.Helper.Converter
{/// <summary>/// 菜单权限转换器/// </summary>public class AdminVisibleConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value == null) return Visibility.Collapsed;if (int.TryParse(value.ToString(), out int index)){return index == 0 ? Visibility.Visible : Visibility.Collapsed;}else{return Visibility.Collapsed;}}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){throw new NotImplementedException();}}
}
2、主界面引入转换器 
<Window x:Class="West.StoreMgr.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:West.StoreMgr" xmlns:Control="clr-namespace:West.StoreMgr.Control"mc:Ignorable="d"DataContext="{Binding Source={StaticResource Locator},Path=Main}"WindowStartupLocation="CenterScreen"xmlns:converter="clr-namespace:West.StoreMgr.Helper.Converter"Title="欢迎使用仓库管理系统" Height="720" Width="1380"><Window.Resources><converter:AdminVisibleConverter x:Key="AdminVisibleConverter"/></Window.Resources><Grid><!--整体布局分为2行2列--><Grid.ColumnDefinitions><ColumnDefinition Width="276"/><ColumnDefinition/></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition Height="61"/><RowDefinition/></Grid.RowDefinitions><!--第1行第1列标识名称--><Grid Grid.Row="0" Grid.Column="0" Tag="标志" Background="#367FA8"><TextBlock Text="企业仓库管理系统" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#F6A518" FontSize="28"/></Grid><!--第1行第2列帐号信息--><Grid Grid.Row="0" Grid.Column="1" Tag="顶栏" Background="#3C8DBB"><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><StackPanel Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Center" Orientation="Horizontal"><TextBlock Margin="10" FontSize="16" Text="" FontFamily="Fonts/#FontAwesome" Foreground="White" VerticalAlignment="Center"/><TextBlock Margin="0 10 0 10" FontSize="16" Text="欢迎" Foreground="White" VerticalAlignment="Center"/><TextBlock Margin="5 10 0 10" FontSize="16" Text="{Binding AppData.User.Name}" Foreground="White" VerticalAlignment="Center" Style="{StaticResource TextBoxBanberStyle}" MouseUp="TextBlock_MouseUp_2"/></StackPanel><StackPanel Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Center" Orientation="Horizontal" Margin="0 0 20 0"><TextBlock Margin="10" FontSize="16" Text="" FontFamily="Fonts/#FontAwesome" Foreground="White" VerticalAlignment="Center"/><TextBlock Margin="0 10 0 10" FontSize="16" Text="修改密码" Foreground="White" VerticalAlignment="Center" Style="{StaticResource TextBoxBanberStyle}" MouseUp="TextBlock_MouseUp_1"/><TextBlock Margin="10" FontSize="16" Text="" FontFamily="Fonts/#FontAwesome" Foreground="White" VerticalAlignment="Center"/><TextBlock Margin="0 10 0 10" FontSize="16" Text="退出系统" Foreground="White" Style="{StaticResource TextBoxBanberStyle}" MouseUp="TextBlock_MouseUp" /></StackPanel></Grid><!--第2行1列菜单--><Grid Grid.Row="1" Grid.Column="0" Tag="菜单"><Grid.RowDefinitions><RowDefinition Height="auto"/><RowDefinition/></Grid.RowDefinitions><Border Height="41" Background="#1A2327" VerticalAlignment="Center"><TextBlock Text="导航菜单" FontSize="20" Foreground="AntiqueWhite" VerticalAlignment="Center"/></Border><!--左侧主菜单--><ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"><StackPanel Background="#222C32"><RadioButton x:Name="IndexView" Click="StoreView_Checked" Height="50" Content="控制台首页" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><!--基础数据菜单,加上权限设置--><Expander Background="#1D282B" ExpandDirection="Down" SnapsToDevicePixels="True" VerticalAlignment="Top" Style="{DynamicResource ExpanderStyle}" Visibility="{Binding AppData.User.Role,Converter={StaticResource AdminVisibleConverter}}"><Expander.Header><StackPanel Orientation="Horizontal" Height="50" Background="Transparent"><TextBlock Width="auto" Margin="10 0 10 0" Text="" FontFamily="Fonts/#FontAwesome" FontSize="22" Foreground="Red" VerticalAlignment="Center"></TextBlock><TextBlock Width="200" FontSize="18" Text="基础数据" Foreground="#918C8C" VerticalAlignment="Center"></TextBlock></StackPanel></Expander.Header><Expander.Content><StackPanel Background="#F6F8F8"><RadioButton x:Name="GoodsTypeView" Click="StoreView_Checked" Height="30" Content="物资设置" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="GoodsView" Click="StoreView_Checked" Height="30" Content="物资登记" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton Name="SupplierView" Click="StoreView_Checked" Height="30" Content="供应商设置" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton Name="CustomerView" Click="StoreView_Checked" Height="30" Content="客户管理" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="StoreView" Click="StoreView_Checked" Height="30" Content="仓库设置" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="SpecView" Click="StoreView_Checked" Height="30" Content="规格设置" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /></StackPanel></Expander.Content></Expander><!--物品管理菜单--><Expander Background="#1D282B" ExpandDirection="Down" SnapsToDevicePixels="True" VerticalAlignment="Top" Style="{DynamicResource ExpanderStyle}"><Expander.Header><StackPanel Orientation="Horizontal" Height="50" Background="Transparent"><TextBlock Width="auto" Margin="10 0 10 0" Text="" FontFamily="Fonts/#FontAwesome" FontSize="22" Foreground="Red" VerticalAlignment="Center"></TextBlock><TextBlock Width="200" FontSize="18" Text="物品管理" Foreground="#918C8C" VerticalAlignment="Center"></TextBlock></StackPanel></Expander.Header><Expander.Content><StackPanel Background="#F6F8F8"><RadioButton x:Name="InStoreView" Click="StoreView_Checked" Height="30" Content="入库管理" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="OutStoreView" Click="StoreView_Checked" Height="30" Content="出库管理" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="InventoryView" Click="StoreView_Checked" Height="30" Content="盘存管理" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /></StackPanel></Expander.Content></Expander><!--查询统计菜单--><Expander Background="#1D282B" ExpandDirection="Down" SnapsToDevicePixels="True" VerticalAlignment="Top" Style="{DynamicResource ExpanderStyle}"><Expander.Header><StackPanel Orientation="Horizontal" Height="50" Background="Transparent"><TextBlock Width="auto" Margin="10 0 10 0" Text="" FontFamily="Fonts/#FontAwesome" FontSize="22" Foreground="Red" VerticalAlignment="Center"></TextBlock><TextBlock Width="200" FontSize="18" Text="查询统计" Foreground="#918C8C" VerticalAlignment="Center"></TextBlock></StackPanel></Expander.Header><Expander.Content><StackPanel Background="#F6F8F8"><RadioButton x:Name="QueryStockView" Click="StoreView_Checked" Height="30" Content="库存查询" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="QueryInStoreView" Click="StoreView_Checked" Height="30" Content="入库查询" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="QueryOutStoreView" Click="StoreView_Checked" Height="30" Content="出库查询" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /><RadioButton x:Name="LiveChartView" Click="StoreView_Checked" Height="30" Content="报表统计" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /></StackPanel></Expander.Content></Expander><!--系统维护菜单--><Expander Background="#1D282B" ExpandDirection="Down" SnapsToDevicePixels="True" VerticalAlignment="Top" Style="{DynamicResource ExpanderStyle}" Visibility="{Binding AppData.User.Role,Converter={StaticResource AdminVisibleConverter}}"><Expander.Header><StackPanel Orientation="Horizontal" Height="50" Background="Transparent"><TextBlock Width="auto" Margin="10 0 10 0" Text="" FontFamily="Fonts/#FontAwesome" FontSize="22" Foreground="Red" VerticalAlignment="Center"></TextBlock><TextBlock Width="200" FontSize="18" Text="系统维护" Foreground="#918C8C" VerticalAlignment="Center"></TextBlock></StackPanel></Expander.Header><Expander.Content><StackPanel Background="#F6F8F8"><RadioButton x:Name="DataExportView" Click="StoreView_Checked" Height="30" Content="数据导出" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /></StackPanel></Expander.Content></Expander><!--系统应用菜单--><Expander Background="#1D282B" ExpandDirection="Down" SnapsToDevicePixels="True" VerticalAlignment="Top" Style="{DynamicResource ExpanderStyle}"><Expander.Header><StackPanel Orientation="Horizontal" Height="50" Background="Transparent"><TextBlock Width="auto" Margin="10 0 10 0" Text="" FontFamily="Fonts/#FontAwesome" FontSize="22" Foreground="Red" VerticalAlignment="Center"></TextBlock><TextBlock Width="200" FontSize="18" Text="系统应用" Foreground="#918C8C" VerticalAlignment="Center"></TextBlock></StackPanel></Expander.Header><Expander.Content><StackPanel Background="#F6F8F8"><!--权限设置--><RadioButton x:Name="UserInfoView" Click="StoreView_Checked" Height="30" Content="用户管理" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" Visibility="{Binding AppData.User.Role,Converter={StaticResource AdminVisibleConverter}}" /><RadioButton Click="RadioButton_Click" Height="30" Content="退出系统" FontSize="16" Tag="" Style="{DynamicResource RadioButtonMenuStyle}" Foreground="#85979F" /></StackPanel></Expander.Content></Expander></StackPanel></ScrollViewer></Grid><!--第2行2列内容--><Grid Grid.Row="1" Grid.Column="1" Tag="舞台" Background="#E4ECEF"><ContentControl x:Name="container"><!--<Control:ButtonCard Logo="" Title="入库管理" Content="这是一个可以入库的快捷操作"></Control:ButtonCard>--></ContentControl></Grid></Grid>
</Window>
3)使用转换器 
3、运行效果
相关文章:

仓库管理系统26--权限设置
原创不易,打字不易,截图不易,多多点赞,送人玫瑰,留有余香,财务自由明日实现 1、权限概述 在应用软件中,通常将软件的功能分为若干个子程序,通过主程序调用。那么,通过…...

d3dx9_43.dll丢失怎么解决?d3dx9_43.dll怎么安装详细教程
在使用计算机中,如果遇到d3dx9_43.dll丢失或许找不到d3dx9_43.dll无法运行打开软件怎么办?这个是非常常见问题,下面我详细介绍一下d3dx9_43.dll是什么文件与d3dx9_43.dll的各种问题以及d3dx9_43.dll丢失的多个解决方法! 一、d3dx9…...

[C++] 退出清理函数解读(exit、_exit、abort、atexit)
说明:在C中,exit、_exit(或_Exit)、abort和atexit是用于控制程序退出和清理的标准库函数。下面是对这些函数的详细解读: exit 函数原型:void exit(int status);作用:exit函数用于正常退出程序…...

代码随想录(回溯)
组合(Leetcode77) 思路 用递归每次遍历从1-n得数,然后list来记录是不是组合到k个了,然后这个每次for循环的开始不能和上一个值的开始重复,所以设置个遍历开始索引startindex class Solution {static List<List<…...

编译原理1
NFA&DFA 在正规式的等价证明可以借助正规集,也可以通过有限自动机DFA来证明等价,以下例题是针对DFA证明正规式的等价,主要步骤是①NFA;②状态转换表; ③状态转换矩阵; ④化简DFA; 文法和语…...

【信息系统项目管理师知识点速记】组织通用管理:流程管理
23.2 流程管理 通过流程视角能够真正看清楚组织系统的本质与内在联系,理顺流程能够理顺整个组织系统。流程是组织运行体系的框架基础,流程框架的质量影响和决定了整个组织运行体系的质量。把流程作为组织运行体系的主线,配备满足流程运作需要的资源,并构建与流程框架相匹配…...

前端 JS 经典:箭头函数的意义
箭头函数是为了消除函数的二义性。 1. 二义性 函数的二义性指函数有不同的两种用法,就造成了二义性,函数的两种用法:1. 指令序列。2. 构造器 1.1 指令序列 就是调用函数,相当于将函数内部的代码再从头执行一次。 1.2 构造器 …...

Java List操作详解及常用方法
Java List操作详解及常用方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 什么是Java List? Java中的List是一种动态数组,它允许存…...

《mysql篇》--查询(进阶)
目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…...

数据库-MySQL 实战项目——书店图书进销存管理系统数据库设计与实现(附源码)
一、前言 该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。 所需环境 MySQL可视化工具:navicat; 数据库:MySq…...

eNSP中WLAN的配置和使用
一、基础配置 1.拓扑图 2.VLAN和IP配置 a.R1 <Huawei>system-view [Huawei]sysname R1 GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.200.200.200 24 b.S1 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 100 [S1-vlan100]vlan 1…...

<sa8650>QCX ID16_UsecaseRawLiteAuto 使用详解
<sa8650>QCX ID16_UsecaseRawLiteAuto 使用详解 一、前言二、ID16_UsecaseRawLiteAuto拓扑图三、UsecaseRawLiteAuto拓扑图 解析3.1 camxUsecaseRawLiteAuto.xml3.2 camxRawLiteAuto.xml四、测试一、前言 我们在使用QCX时,如果由于使用的摄像头自带了ISP,那么可能不需要使…...

为什么3d重制变换模型会变形?---模大狮模型网
在当今数字技术飞速发展的时代,3D建模和动画制作已经成为影视、游戏和虚拟现实中不可或缺的一部分。然而,即使在高级的3D软件中,重制(rigging)和变换(transformation)过程中仍然会面临一个普遍的问题——模型变形。这种变形可能导致动画效果不…...

ElasticSearch中的BM25算法实现原理及应用分析
文章目录 一、引言二、BM25算法实现原理BM25算法的实现原理1. 词频(TF):2. 逆文档频率(IDF):3. 长度归一化:4. BM25评分公式: BM25算法示例 三、BM25算法在ElasticSearch中的应用分析…...

web权限到系统权限 内网学习第一天 权限提升 使用手工还是cs???msf可以不??
现在开始学习内网的相关的知识了,我们在拿下web权限过后,我们要看自己拿下的是什么权限,可能是普通的用户权限,这个连添加用户都不可以,这个时候我们就要进行权限提升操作了。 权限提升这点与我们后门进行内网渗透是乘…...

ros1仿真导航机器人 hector_mapping gmapping
仅为学习记录和一些自己的思考,不具有参考意义。 1 hector_mapping 建图过程 (1)gazebo仿真 roslaunch why_simulation why_slam.launch <launch><!-- We resume the logic in empty_world.launch, changing only the name of t…...

嵌入式实验---实验五 串口数据接收实验
一、实验目的 1、掌握STM32F103串口数据接收程序设计流程; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、STM32F103R6能通过查询中断方式接收数据,每接收到一个字节,立即向对方发送一个相同内容的字节,并把该字节的十六进…...

ubuntu 22.04下编译安装glog共享库
笔者是完美主义者,在编译opencv4.9时,有个有关glog的warn,就下载编译google的glog库并把它编译成shared libaray。重新编译opencv4.9时,该warn解除。现把编译安装glog过程记录,以备后查。 以下操作全程以root身份或sudo执行。 cd…...

Linux环境安装配置nginx服务流程
Linux环境的Centos、麒麟、统信操作系统安装配置nginx服务流程操作: 1、官网下载 下载地址 或者通过命令下载 wget http://nginx.org/download/nginx-1.20.2.tar.gz 2、上传到指定的服务器并解压 tar -zxvf nginx-1.20.1.tar.gzcd nginx-1.20.1 3、编译并安装到…...

设计模式-模板模式
简介 模板方法模式是一种行为设计模式,它在父类中定义了一个操作的算法框架,允许子类在不改变算法结构的情况下重定义算法的某些步骤。这种模式是基于继承的,通过抽象类将通用的代码抽取到超类中,同时通过具体类实现或者改写算法…...

物理删除和逻辑删除区别
物理删除和逻辑删除是数据库管理中针对记录删除操作的两种不同方式,它们的主要区别在于数据的实际处理和后续影响: 物理删除: 操作实质:物理删除会将数据记录从数据库表中彻底移除,包括记录所占的磁盘空间都会被释放。…...

C# 警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset”
警告 warning MSB3884: 无法找到规则集文件“MinimumRecommendedRules.ruleset” C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64\Microsoft.CSharp.CurrentVersion.targets(129,9): warning MSB3884: 无法找到规则集文件“MinimumRe…...

Lua网站开发之文件表单上传
这个代码示例演示如何上传文件或图片,获取上传信息及保存文件到本地。 local fw require("fastweb") local request require("fastweb.request") local response require("fastweb.response") local cjson require("cjson&q…...

千益畅行,旅游卡,如何赚钱?
赚钱这件事情,只有自己努力执行才会有结果。生活中没有幸运二字,每个光鲜亮丽的背后,都是不为人知的付出! #旅游卡服务#...

Element-plus点击当前行之后获取数据显示跟随行数据
要实现点击当前行后,在当前行的下方显示数据,可以通过以下步骤来实现: 在表格的行点击事件中获取当前点击行的位置信息。根据位置信息动态计算并设置需要显示数据区域的位置。 下面是一个更新后的示例代码,演示如何在 Element-P…...

Docker与微服务实战2022 尚
Docker与微服务实战2022 尚硅谷讲师:周阳 1. 基础篇(零基小白) 1 1.1. Docker简介 2 1.2. Docker安装 15 1.3. Docker常用命令 29 1.4. Docker镜像 43 1.5. 本地镜像发布到阿里云 50 1.6. 本地镜像发布到私有库 57 1.7. Docker容器数据卷 64 1.8. Docker常规安装简介 …...

Spring @Cacheable缓存注解用法说明
注解Cacheable 是 Spring 框架中用于缓存数据的方法或类的注解。通过使用这个注解,你可以避免重复计算和重复获取数据,从而提高应用程序的性能。 基本用法 引入依赖 确保在你的项目中引入了 Spring Cache 相关的依赖。如果你使用的是 Spring Boot&…...

Redis如何实现主从复制
Redis主从复制包括全量复制和增量复制。主是主服务器,从是从服务器,主服务器(master )的数据如果更新了也会同步到从服务器(slave),一个主服务器可以搭配很多个从服务器,主服务器负责写入,从服务器只能读取…...

正则表达式以及文本三剑客grep、sed、awk
正则表达式匹配的是文本内容,文本三剑客都是针对文本内容。 grep:过滤文本内容 sed:针对文本内容进行增删改查 awk:按行取列 一、grep grep的作用使用正则表达式来匹配文本内容 1、grep选项 -m:匹配几次之后停止…...

HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡
1、相关原理 在网络中,如果一台作为默认网关的三层交换机或者路由器损坏,所有使用该网关为下一跳的主机通信必然中断,即使配置多个默认网关,在不重启终端的情况下,也不能彻底换到新网关。Cisco提出了HSRP热备份路由协…...