博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET- 简单的权限管理
阅读量:5299 次
发布时间:2019-06-14

本文共 3741 字,大约阅读时间需要 12 分钟。

 权限管理是开发信息管理系统中比较重要的一块,如何把权限管理做的更完美,功能更强大,是值得花很多时间去研究的。

 这里记录一下自己对权限管理的一个简单认识,可以说是至简单,说不上一个完整的权限管理,更说不上强大。
 这里的权限管理,只是根据不同的用户对应的角色,显示不同的菜单,不同的菜单表示用户具备不同的权限!仅此而以!!

 实现起来数据库的设计一共需要四张表

 用户表Users
 id   userName   passWord   roleId
 1   ccx       123456      1
 2   zxm      123456       2

 角色表Roles

 id   roleName
 1   系统管理员
 2   普通用户

 菜单表Menus

 id   pid   name    url
 1   0   新闻中心   NULL
 2   1   娱乐新闻   news.aspx
 3   1   China新闻  chinaNews.aspx
 4   0   生活     NULL
 5   4   彩票购买   buycp.aspx
 6   4   电影票    movie.aspx
 7   6   娱乐电影票   ylmovie.aspx
 8   6   武打电影票   wdmovie.aspx

 角色菜单表RolesMenu

 id roleId  menuId
 1 1  1
 2 1  2
 3 2  1
 4 1  3
 5 1  4
 6 1  5
 7 1  6
 8 1  7
 9 1  8

实现的原理很简单:首先在登陆的时候对Users表进行操作,判断用户是否存在,如果存在通过Session将对应用户的roleId值保存起来,然后跳转到登陆主界面
接着在登陆主界面中操作RolesMenu表,通过左关联将Roles表和Menus表与RolesMenu关联起来,并根据roleId值过滤,找出当角色所对应的菜单

这里用到了一个JS插件DTREE,来显示一下树状的结果。下面直接贴代码

LOGIN.ASPX登陆用:

protected void btnLogin_Click(object sender, EventArgs e)        {            string userName = txtUserName.Text;            string passWord = txtPassWord.Text;                        PowerControl.BLL.Users users = new BLL.Users();            if (users.Exists(userName, passWord))            {                Model.Users u = users.GetModel(userName);                Session["UserName"] = u;                Session["RoleId"] = u.roleId;                Response.Redirect("Index.aspx");            }            else            {                LitMsg.Text = "不存在!!";            }        }

Index.Js页面,用于结合DTree页面显示成树状

function LoadPowerMenu(roleId) {    $.post("/Service/PowerUser.ashx?roleId=" + roleId,    function (data) {        var JsonData = $.parseJSON(data);        mytree = new dTree('mytree', 'MenuPageCall');        //mytree.config.closeSameLevel = true;        //mytree.config.useCookies = false;        mytree.add('root', -1, '系统管理');        mytree.openAll();        for (var i = 0; i < JsonData.length; i++) {            var id = JsonData[i].id;            var parentId = JsonData[i].pId;            var menuName = JsonData[i].name;            var menuURL = JsonData[i].url;            if (parentId == 0) {                mytree.add(id, 'root', menuName, menuURL, "mainFrame", "mainFrame");            }            else {                mytree.add(id, parentId, menuName, menuURL, "mainFrame", "mainFrame");            }        }        document.getElementById("divMenu").innerHTML = mytree;    });}

Inde.aspx页面加载

        

用一个Handler获取对角色所要的所对应的菜单

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;using System.Web.Script.Serialization;using System.Text;using PowerControl.Common;namespace PowerControl.Service{    ///     /// PowerUser 的摘要说明    ///     public class PowerUser : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            context.Response.ContentType = "text/plain";            int roleId = Convert.ToInt32(context.Request["roleId"].ToString());            PowerControl.BLL.RolesMenu rMenuBll = new BLL.RolesMenu();            DataSet ds = rMenuBll.GetMenuListByRoleId(roleId);            string strJson = ConvertJson.ToJson(ds.Tables[0]);            context.Response.Write(strJson);        }        public bool IsReusable        {            get            {                return false;            }        }    }}

最后存储过程:

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Author:  陈春晓
-- Create date: 2013-05-13
-- =============================================
ALTER PROCEDURE [dbo].[Proc_GetPwoerMnageMenu]
 @roleid INT
AS
    BEGIN
        SELECT  m.*
        FROM    rolesmenu rm
                LEFT JOIN roles r ON rm.roleid = r.id
                LEFT JOIN menu m ON rm.menuid = m.id
        WHERE r.id = @roleid
    END

 

转载于:https://www.cnblogs.com/cxeye/archive/2013/05/15/3080121.html

你可能感兴趣的文章
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
FUSE-用户空间文件系统
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
AVL数
查看>>
属性动画
查看>>
标识符
查看>>
路由跟踪工具0trace
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>