tnblog
首页
视频
资源
登录

.NET EF权限管理之按钮级别

4952人阅读 2019/11/6 10:32 总访问:14975 评论:0 收藏:1 手机
分类: EF

前面我们做了树形级别的,现在我们就来分析讲解一哈按钮级别的。

树形级别效果如下:

按钮级别分析:

首先我们要在控制器里再加两个方法,两个方法分别是:第一个:根据权限id查询按钮权限的方法,第二个:给予用户按钮权限授权

  1. 第一个方法代码如下:
  2. public ActionResult GetButtonPremissonByPId(int pid)
  3.         {
  4.             PremissonDAL premissonDAL = new PremissonDAL();
  5.             List<Premisson_Func> premissonList = premissonDAL.GetButtonPremissonByPId(pid);
  6.             var index = 1;
  7.             foreach (var item in premissonList)
  8.             {
  9.                 item.Remark = string.Format("<input type=\"radio\" lay-filter=\"premissonradio\" name=\"sex{0}\" checked=\"\" value=\"1\" title=\"启动\" checked=\"\"><input type=\"radio\" lay-filter=\"premissonradio\" name=\"sex{0}\" value=\"0\" title=\"禁用\" checked=\"\"><input type=\"radio\" lay-filter=\"premissonradio\" name=\"sex{0}\" value=\"2\" title=\"禁用并隐藏\">", index);
  10.                 index++;
  11.             }
  12.             return Json(new { code = 0, msg = "成功", data = premissonList }, JsonRequestBehavior.AllowGet);
  13.         }
  14. 第二个方法代码如下:
  15. public ActionResult SaveButtonPremisson(int? userid, int? premissid, int type)
  16.         {
  17.             PremissonDAL premissonDAL = new PremissonDAL();
  18.             Premisson_Func_X_Users func_x_users = new Premisson_Func_X_Users() { UserId = userid, PId = premissid, Type = type };
  19.             int count = premissonDAL.AddButtonPremisson(func_x_users);
  20.             return Json(count);
  21.         }

其次我们在要在DAL里面同样再加两个方法,两个方法分别是:第一个:添加按钮权限方法,我们用简单粗暴的方法先删,删了之后再添。第二个方法是:根据权限id查询按钮权限

  1. 第一个DAL方法代码如下:
  2. public int AddButtonPremisson(Premisson_Func_X_Users func_x_users)
  3.         {
  4.             oaEntities oae = new oaEntities();
  5.             oae.Database.ExecuteSqlCommand("delete from dbo.Premisson_Func_X_Users where userid=@userid and pid=@pid",new SqlParameter("userid",func_x_users.UserId),new SqlParameter("pid",func_x_users.PId));
  6.             oae.Premisson_Func_X_Users.Add(func_x_users);
  7.             return oae.SaveChanges();
  8.         }
  9. 第二个DAL方法代码如下:
  10.  public List<Premisson_Func> GetButtonPremissonByPId(int pid)
  11.         {
  12.             oaEntities oae = new oaEntities();
  13.             return oae.Premisson_Func.Where(a=>a.Parent==pid&&a.Tag=="button").ToList();
  14.         }

最后我们在百度里面去搜索layui找到如下方法,在获取对应需要的值即可

  1.   layui.use(['tree''util''form','table'], function ({
  2.         var tree = layui.tree
  3.         , layer = layui.layer
  4.         , util = layui.util
  5.         , form = layui.form
  6.         var table = layui.table;
  7.         //监听单选按钮事件
  8.         form.on('radio(premissonradio)'function (data{
  9.             console.log(data.elem); //得到radio原始DOM对象
  10.             //alert(data.value); //被点击的radio的value值
  11.             //授权类型
  12.             var type = data.value;
  13.             //授权人
  14.             var userid = $("#usersel").val();
  15.             if (userid==null||userid=="") {
  16.                 alert("请选择授权人");
  17.                 return;
  18.             }
  19.             //获取权限id
  20.             var pid = $(data.elem).parents("tr").find("td").eq(0).find("div").html();
  21.             $.post('/Premisson/SaveButtonPremisson', { userid: userid, premissid: pid, type: type }, function ({
  22.             });
  23.         });
  24.       //给树形提供值
  25.             tree.render({
  26.                 elem'#test12'
  27.               , data: treenode
  28.               , showCheckboxtrue  //是否显示复选框
  29.               , id'demoId1'
  30.               , isJumptrue //是否允许点击节点时弹出新窗口跳转
  31.               , clickfunction (obj{
  32.                   var data = obj.data;  //获取当前点击的节点数据
  33.                   table.render({
  34.                       elem'#test'
  35.                        , url'/Premisson/GetButtonPremissonByPId?pid=' + data.id
  36.                        , cellMinWidth80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
  37.                        , cols: [[
  38.                           { field'Id'width80title'ID'sorttrue }
  39.                           , { field'Name'width80title'权限' }
  40.                           , { field'Url'width210title'控制器'sorttrue }
  41.                           , { field'Remark'title'授权' }
  42.     ]]
  43.                   });


       
在这里数据库设计非常重要。数据库代码如下:

  1. use master 
  2. go
  3. if exists (select 1 from sysdatabases where name='oa')
  4.   drop database oa
  5. go
  6. create database oa
  7. go
  8. use oa
  9. go
  10. create table [dbo].[Users]
  11. (
  12.     Id            int         identity(1,1)  not null,
  13.     UserName    nvarchar(64)  null,
  14.     Password    nvarchar(64)  null,
  15.     UClass      nvarchar(64)  null,
  16.     CheckType     int         null,
  17.     IDCard      nvarchar(64)  null,
  18.     BankId      nvarchar(64)  null,
  19.  primary key clustered
  20.  (
  21.      Id  asc
  22.  ) with (pad_index=off,statistics_norecompute=off,ignore_dup_key=off,allow_row_locks=on,allow_page_locks=onon [primary]
  23.  )on [primary]
  24.  go
  25.  set identity_insert [dbo].[Userson
  26.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(1,'张黑黑','123456','T468',1,NULL,NULL);
  27.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(2,'张大黑','123456','T467',1,NULL,NULL);
  28.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(3,'张秋丽','123456','T469',2,NULL,NULL);
  29.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(4,'李斯文','123456','T470',1,NULL,NULL);
  30.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(5,'关羽','123456','T480',2,NULL,NULL);
  31.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(6,'丁原','123456','T479',3,NULL,NULL);
  32.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(7,'刘备','123456','T481',3,NULL,NULL);
  33.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(8,'曹操','123456','T465',3,NULL,NULL);
  34.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(9,'孙悟空','123456','T466',1,NULL,NULL);
  35.  insert [dbo].[Users] ([Id],[UserName],[Password],[UClass],[CheckType],[IDCard],[BankId]) values(10,'猪八戒','123456','T464',2,NULL,NULL);
  36.  
  37.  select * from [dbo].[Users];
  38.  
  39.  
  40.  create table [dbo].[Premisson_Func_X_Users]
  41.  (
  42.          Id      int    primary key    identity(1,1)   not  null,
  43.          UserId  int    not null,
  44.          PId     int    not null,
  45.          Type    int    null,
  46.  )
  47.  go
  48.  
  49.  --张黑黑分配权限
  50.  insert into [dbo].[Premisson_Func_X_Users] values(1,1,null);
  51.  insert into [dbo].[Premisson_Func_X_Users] values(1,4,null);
  52.  insert into [dbo].[Premisson_Func_X_Users] values(1,5,null);
  53.  insert into [dbo].[Premisson_Func_X_Users] values(1,6,null);
  54.  --张大黑分配权限
  55.  insert into [dbo].[Premisson_Func_X_Users] values(2,2,null);
  56.  insert into [dbo].[Premisson_Func_X_Users] values(2,7,null);
  57.  insert into [dbo].[Premisson_Func_X_Users] values(2,8,null);
  58.  
  59.  insert into [dbo].[Premisson_Func_X_Users] values(1,2,null);
  60.  insert into [dbo].[Premisson_Func_X_Users] values(1,7,null);
  61.  insert into [dbo].[Premisson_Func_X_Users] values(1,8,null);
  62.  
  63.  insert into [dbo].[Premisson_Func_X_Users] values(3,1,null);
  64.  --张秋丽分配权限
  65.  insert into [dbo].[Premisson_Func_X_Users] values(3,2,null);
  66.  insert into [dbo].[Premisson_Func_X_Users] values(3,7,null);
  67.  insert into [dbo].[Premisson_Func_X_Users] values(3,8,null);
  68.  
  69.  insert into [dbo].[Premisson_Func_X_Users] values(3,3,null);
  70.  insert into [dbo].[Premisson_Func_X_Users] values(3,10,null);
  71.  select * from [dbo].[Premisson_Func_X_Users];
  72.  
  73.  
  74.  create table [dbo].[Premisson_Func]
  75.  (
  76.       Id       int          primary key    identity(1,1)   not  null,
  77.       Name   nvarchar(64)   not null,
  78.       Url    nvarchar(64)   null,
  79.       Parent   int   null,
  80.       Tag    nvarchar(32)   null,
  81.       Remark nvarchar(64)   null,
  82.  )
  83.  go
  84.  
  85.  insert into [dbo].[Premisson_Func] values('部门管理',NULL,NULL,null,null);
  86.  insert into [dbo].[Premisson_Func] values('权限管理',NULL,NULL,null,null);
  87.  insert into [dbo].[Premisson_Func] values('人事管理',NULL,NULL,null,null);
  88.  insert into [dbo].[Premisson_Func] values('技术部','/home/index',1,null,null);
  89.  insert into [dbo].[Premisson_Func] values('测试部','/home/DepartTwo',1,null,null);
  90.  insert into [dbo].[Premisson_Func] values('实施部','/home/DepartThree',1,null,null);
  91.  insert into [dbo].[Premisson_Func] values('菜单管理','#',2,null,null);
  92.  insert into [dbo].[Premisson_Func] values('权限分配','/Premisson/GivePremisson',2,null,null);
  93.  insert into [dbo].[Premisson_Func] values('角色管理','#',2,null,null);
  94.  insert into [dbo].[Premisson_Func] values('考勤管理','#',3,null,null);
  95.  
  96.  insert into [dbo].[Premisson_Func] values('添加','/MenuManger/DoAdd',7,'button',null);
  97.  insert into [dbo].[Premisson_Func] values('更新','/MenuManger/DoUpdate',7,'button',null);
  98.  insert into [dbo].[Premisson_Func] values('删除','/MenuManger/DoDelete',7,'button',null);
  99.  insert into [dbo].[Premisson_Func] values('查看','/MenuManger/DoSearch',7,'button',null);
  100.  insert into [dbo].[Premisson_Func] values('打印','/MenuManger/DoStamp',7,'button',null);
  101.  select * from [dbo].[Premisson_Func];
  102.  
  103.  --查询用户id查询用户所拥有的权限
  104.  select * from dbo.Premisson_Func where Id in (select pid from dbo.Premisson_Func_X_Users where UserId=1)




这样我们就大功告成了,点击左边的菜单管理右边也能出现表格的样子了(这里不一定是表格,可以是其他的,div什么之类的都行。自己觉得好看就OK了)。效果如下:
(如果我这里没有选择授权人,那么它会弹一个框出来提示你:请选择授权人,选择了之后我们才能进行一系列的操作)。


在这里我选一个授权人是张大黑,我们把他更新禁用掉的,跟他启动
禁用时的效果如下:

启动时的效果如下:
在这里我们可以看到两个启动,我们再去数据库里看一下数据库刚才启动那个数据是否更新?


在这里我们可以看到数据库是更新了的,他的type为1就说明我们是更新成功了的。

type为1:启动
type为0:禁用
type为2:禁用并隐藏





评价

.net EF 用户分配权限

站在青春的夕阳下,感受着过往,留下浅浅的笑靥,这大概就是我们的狂欢过得青春。今天我们主要讲解EF中 不同用户登录管理分...

.net EF 用户按钮权限

蓬莱枯死三千树,为君重满碧桃花。其实喜欢一个女生就多买东西给她吃。吃胖了,没人追了,就是你的了。今天我们分享不同用...

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

windows 自带的netsh进行端口映射

使用netsh 把本地任意ip的25566端口 映射到192.168.81.234的25565端口netshinterfaceportproxyaddv4tov4listenaddress=0.0....

确保.net程序始终以管理员身份运行

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; ...

ASP.net Timer细节处理

Timer的用法:1:本人称之为计时器,是asp.net官方的一种。用法即是计时所用 2:关于计时有很多中方式,本人学识有限,暂...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...
我的青春我做主!
排名
75
文章
3
粉丝
4
评论
1
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术