tnblog
首页
视频
资源
登录

.NET EF 用户分配权限

5686人阅读 2019/11/4 13:43 总访问:415261 评论:0 收藏:1 手机
分类: .NET MVC权限

站在青春的夕阳下,感受着过往,留下浅浅的笑靥,这大概就是我们的狂欢过得青春。


今天我们主要讲解EF中 不同用户登录管理分配树形权限(充分利用了layui框架)


上一章节我们讲解了登录权限和首页显示,下面我们讲解生成树形权限并分配权限:

1,生成树形级别图,代码如下:


@*权限树形图*@
<div id="test12" class="demo-tree demo-tree-box" style="margin-top:15px;margin-left:40px"></div>


@*方法1:*@
@*@model List<Powers>
@foreach (Powers item in Model.Where(a=>a.ParentId==null))
{
    <input type="checkbox" />@item.PowerType
    <div style="margin-left:10px">
        @foreach (var children in Model.Where(a => a.ParentId == item.Id)
    {
         <input type="checkbox" />@children.PowerType
    }
    </div>
    
}*@


@*方法2:引用layui样式*@
<script>

    layui.use(['tree', 'util', 'form'], function () {

        var tree = layui.tree
       , layer = layui.layer
       , util = layui.util
       , form =layui.form

    $.get('/Premisson/GetALLPremission_power', function (data) {
        //console.log(data);
        var treenode = [];

        for (var i = 0; i < data.length; i++) {
            if (data[i].ParentId == null)  //第一级
            {
                var parent = {};
                parent.id = data[i].Id;
                parent.title = data[i].PowerType; //名字
                parent.children = [];
                //默认全部展开
                parent.spread = true;
                console.log("-------------一级开始-----------------");
                for (var j = 0; j < data.length; j++) {
                    if (data[j].ParentId == data[i].Id) {
                        var children = {};
                        children.id = data[j].Id;   //需要的是子级的Id
                        children.title = data[j].PowerType;  //名字

                        parent.children.push(children);
                    }
                }
                treenode.push(parent);
                console.log("-------------子级结束-----------------");
            }
        }
        console.log(treenode);

        //树形的基本演示  
        tree.render({
            elem: '#test12'
          , data: treenode
          , showCheckbox: true  //是否显示复选框
          , id: 'demoId1'
          , isJump: true //是否允许点击节点时弹出新窗口跳转
          , click: function (obj) {
              var data = obj.data;  //获取当前点击的节点数据
              layer.msg('状态:' + obj.state + '<br>节点数据:' + JSON.stringify(data));
          }
        });

    })


后台代码: (得到权限表数据的一个集合,然后传递前台)

注意:我们第二种方法是在layui的环境下生成的,(为了样式好看,专业等考虑),效果如下:



接下来我们需要做的是不同用户登录,然后树形图默认勾选对应的权限


1,先在前台用layui样式生成用户选择框和保存按钮


2,js代码:(主要使用layui样式完成对select的监听)


      //监听所有的select
    form.on('select(usersel)', function (data) {
       // alert(data.value);
         //console.log(data.elem); //得到select原始DOM对象
         //console.log(data.value); //得到被选中的值
        //console.log(data.othis); //得到美化后的DOM对象

        //清空以前的选择效果
        //重载实例
        tree.reload('demoId1', {

        });
        //查询选择用户的权限
        $.get('/Premisson/GetPremissonById/' + data.value, function (allids) {
          
         // console.log(allids);
          //alert(allids);
            tree.setChecked('demoId1', allids); //勾选指定节点
        })

        });  

后台代码主要就是获取该用户的所有权限Id,如图:

权限的类库层(pressionDAL)


控制器编辑代码:


这样我们的用户绑定并获取权限就好啦,如图:


最后一步就是不同用户分配权限:

1,按钮事件,获取选中节点的数据Id

      //按钮事件 --保存更改
      util.event('lay-demo', {
        getChecked: function (othis) {
            var checkedData = tree.getChecked('demoId1'); //获取选中节点的数据

           // layer.alert(JSON.stringify(checkedData), { shade: 0 });
            console.log(checkedData);

            var ids = "";
            //解析json对象
            for (var i = 0; i < checkedData.length; i++) {
                //console.log(checkedData[i].id);
                //一级Id
                ids += checkedData[i].id + ",";
                
                for (var j = 0; j < checkedData[i].children.length; j++) {
                    //console.log(checkedData[i].children[j].id);
                    //系级Id
                    ids += checkedData[i].children[j].id + ",";
                    // console.log(ids);
                }
            }
           alert(ids);

            //获取选择要权限的用户Id
            //alert($("#usersel").val());
            var userid = $("#usersel").val();
            if (userid == null || userid == "")
            {
                alert("请选择需要授权的用户");
                return;
            }
            $.post('/Premisson/SavePremisson', { userid: userid, pressionid: ids }, function (result) {

                alert(result.Message);
            })
        }
     
    });

注释:最后的思路是:先遍历json对象->获取权限节点id->通过post请求传到后台。后台思路:先清除该用户所有的权限->保存用户选择的所有权限

 /// <summary>
        ///给选中的用户授权 (保存)
        /// </summary>  
        public ActionResult SavePremisson(int? userid, string pressionid)
        {
            //标准化判断
            ReturnValue returnValue = new ReturnValue();
            if (userid == null)
            {
                returnValue.Code = 201;
                returnValue.Message = "用户Id不能为空";
                return Json(returnValue);
            }
            if (pressionid == null)
            {
                returnValue.Code = 202;
                returnValue.Message = "权限不能为空";
                return Json(returnValue, JsonRequestBehavior.AllowGet);
            }


            PremissonDAL premissonDAL = new PremissonDAL();

            //先清除该用户所有的权限
            premissonDAL.ClearALLPremission((int)userid);

            try
            {
                //然后保存用户选择的所有权限
                List<Power_User> pressionList = new List<Power_User>();

                foreach (var item in pressionid.TrimEnd(',').Split(','))  //TrimEnd:删除最后的逗号,Split:格式化
                {
                    pressionList.Add(new Power_User() { PowerId = Convert.ToInt32(item), UserId = userid });
                }
                //调添加的方法
                premissonDAL.AddPremission(pressionList);

                returnValue.Code = 200;
                returnValue.Message = "授权成功!";
            }
            catch (Exception ex)
            {
                returnValue.Code = 500;
                returnValue.Message = "内部错误:"+ex.Message;
            }

            return Json(returnValue);
    
        }

现在我们的树形权限管理分配就完成啦。用户可以随意修改权限啦,效果如下:



注意:我们前台js用到的方法来自于layui框架,使用的朋友记得配置layui环境哦.

喜欢的朋友可以留言谈论哦,本次浏览希望对你的学习有帮助.


评价

.net 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...
你之所以觉得时间一年比一年过得快,是因为时间对你一年比一年重要。
排名
13
文章
64
粉丝
20
评论
30
MUI框架页面间的传值指针
XingDy姐 : 不错哦
MUI框架页面间的传值指针
剑轩 : 接口的真实地址可以用xx/yy什么的代替哦,真实地址还是隐藏一下好
.NET EF 用户按钮权限
YOU : 可以,在写文章的时候,有需要写代码的地方,可以选择编辑器上的代...
.NET EF 用户按钮权限
剑轩 : 哈哈哈哈,你这个追女生的逻辑
EF三种模式解析
剑轩 : 好文采!
重要sql语句和linq,lamdba分组条件查询语句
剑轩 : 开头那句诗句写得很好哇!
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
你,对,你,就是你,你是你。