自定义用户访问权限

转载 2006年06月11日 18:24:00
在实际的开发当中,我们经常会涉及到权限访问等问题。在很多开发当中有些程序员喜欢用Request.ServerVariables[“Script_Name”]来得到路径,然后再根据Session中的值来判断有没有访问权限,这种方法不好的地方在于页面的路径不能随意的改变,不然造成的工作量非常的大。
       
本方法主要是基于RBAC(基于角色的访问控制),现写出主要的步骤
        1. 创建表(模块表、角色表、角色权限设置表、用户表)

      角色表:TbRole

      字段         类型     大小      约束         描述

       ModuleID         SMALLINT                           主键,不为空       模块编号

       ModuleName           VARCHAR       30                  唯一,不为空       模块中文名称

       ModuleEName       VARCHAR       30                  唯一,不为空       模块英文名字

      

              角色表:TbRole

              字段                     类型              大小              约束                     描述

              RoleID                     SMALLINT                          主键,不为空    角色编号

              RoleName              VARCHAR       20                  唯一,不为空    角色名称

              RoleDesc               VARCHAR       100                                            角色描述

             

              角色权限设置表:TbRoleSet

              字段                     类型              大小              约束                     描述

              RoleSetID              SMALLINT                          主键,不为空    角色设置编号

              RoleID                     SMALLINT                          引用TbRole       角色编号

              ModuleID              SMALLINT                          引用TbModule 模块编号

             

     用户表:TbUser

     字段                     类型              大小              约束                     描述

     UserName        VARCHAR       20                  主键,不为空       用户名

     UserPassword           VARCHAR       10                  不为空                  密码

     UserRole                 SMALLINT                           引用TbRole表       角色

模块表是把系统的各个模块写在其中,然后在角色表中加入角色,再通过角色权限设置表把各个角色能访问的权限联系起来。
模块表:

角色表:

角色权限设置表:

从以上我们可以看出,总共有4个模块,两个角色,他们分别具有的权限为:
管理员(浏览、添加、修改、删除)   普通用户(浏览)
添加了角色以后,我们在添加用户时就可以设定角色了
参考图如下:

用户添加:

2. 用户控件
    数据库设置好了以后,接下来要想在什么地方进行身份检查
    因为整个网站的头应该是相同的,所以我们可以把验证信息放到一个用户控件中,以后只要把用户控件放到相应的网页即可
    但是每个网页都是不同的功能模块,我们怎么能保证用户控件能够动态的识别呢?
    接下来在用户控件中加入一个模块英文名字的属性

// 模块英文名称
private string moduleEName = "";

/// <summary>
/// 模块英文名称属性
/// </summary>

public string ModuleEName
{
    
set {moduleEName = value;}
    
get {return moduleEName;}
}

            这样的话只要在相应的网页中设置一下用户控件即可实现(注:ModuleEName要和数据库中的模块英文名相同),不设置即代表此页面不需要验证
            如:
            浏览模块页面:
            <uc1:top id="Top1" runat="server" ModuleEName="ViewBook"></uc1:top>
            添加模块页面:
            <uc1:top id="Top1" runat="server" ModuleEName="AddBook"></uc1:top>
            修改模块页面:
            <uc1:top id="Top1" runat="server" ModuleEName="EditBook"></uc1:top>
            删除模块页面:
            <uc1:top id="Top1" runat="server" ModuleEName="DeleteBook"></uc1:top>
            
            3. 身份验证    
            在用户控件中,只读取到英文模块名是无法判断权限的,所以在登录中,一定要把登录的角色用Session保存下来(如:Session["UserRole"])
            那么,既然可以得到正在登录的用户的角色,也可以得到此模块的名称,那么当然可以到数据库中看是否有权限了
            参考代码如下:
           
private void Page_Load(object sender, System.EventArgs e)
{
    
if (!IsPostBack)
    
{
        
// 模块名称等于空,代表不需要进行验证
        
// 只有在模块名称不为空时,才进行权限验证
        if (moduleEName != "")
        
{
            
// Session为空,禁止登录,防止非登录用户
            if (Session["UserRole"== null || Session["UserRole "].ToString() == "")
                Response.Redirect(
"提示页面");
                    
            
try
            
{

                
// 连接数据库
                ……
                
// 根据模块英文名称和角色ID进行查选
                SqlCommand sqlCmd = new SqlCommand("SELECT RoleSetID FROM TbModule a,TbRoleSet b WHERE 
a.ModuleID=b.ModuleID AND ModuleEName='" +  moduleEName + "' AND RoleID=" + Session["UserRole "].ToString() + "",sqlCon);
                sqlCon.Open();

                sqlDr 
= sqlCmd.ExecuteReader();

                
// 返回有记录说明有权限,否则没有权限访问该模块
                if (!sqlDr.HasRows)
                
{
                    Response.Redirect(
"提示页面");
                }

            }

            
catch{}
            
finally
            
{
                
// 释放
                ……

            }

        }

    }

}

 

http://cj.cnblogs.com/archive/2006/06/09/421353.html

Kubernetes中的角色访问控制机制(RBAC)支持

原标题: RBAC Support in Kubernetes Kubernetes 中的 RBAC 支持 PS:在Kubernetes1.6版本中新增角色访问控制机制(Role-B...
  • qq_34463875
  • qq_34463875
  • 2017年05月25日 16:00
  • 1860

Oracle管理权限和角色

oracle管理权限和角色 基本介绍      当刚刚建立用户时,用户没有任何权限,也不能执行任何操作。如果要执行某种特定的数据库操作,则必需为其授予系统的权限;如果用户要访问其它方案的对象,则...
  • q547550831
  • q547550831
  • 2015年11月26日 13:05
  • 2949

MVC 自定义AuthorizeAttribute实现权限管理

MVC中AuthorizeAttribute用法并实现授权管理 (2015-01-05 13:49:30) 转载▼ 标签: authorizeattribute handleunauthor...
  • lenovouser
  • lenovouser
  • 2016年08月10日 22:34
  • 2792

android自定义访问权限permission

由于Android部分设计原理较为开放,可能通过Intent或PackageManager就可以解析处理调用其他应用的子类,所以在部分应用中需要做更多的安全处理,保证应用内部的稳定性和安全性。    ...
  • xyz_lmn
  • xyz_lmn
  • 2012年03月20日 10:21
  • 10160

SpringMVC给控制器添加自定义注解控制访问权限

1、创建自定义组件package com.qingbo.ginkgo.annotation; import java.lang.annotation.Documented; import java....
  • u012547633
  • u012547633
  • 2016年10月14日 17:02
  • 2048

android自定义访问权限

android 中如果我们想让我们的activity或service限制别人的访问,可以加上自定义权限,只有加上我们定义的权限才能访问我们的组件,具体在我们应用中的AndroidManifest.xm...
  • xiafangxingg
  • xiafangxingg
  • 2016年12月09日 11:02
  • 660

SpringMVC给控制器添加自定义注解控制访问权限(未测试)

场景描述:现在需要对部分Controller或者Controller里面的服务方法进行权限拦截。如果存在我们自定义的注解,通过自定义注解提取所需的权限值,然后对比session中的权限判断当前用户是否...
  • lzy1357986420
  • lzy1357986420
  • 2016年07月22日 11:49
  • 196

MongoDB设置访问权限、设置用户

  • 2017年07月09日 00:08
  • 21KB
  • 下载

MongoDB设置访问权限、设置用户

MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),今天特地花了一点时间研究了一下,研究成果如下: 注:研究成果基于...
  • Hu199055
  • Hu199055
  • 2017年06月05日 11:24
  • 287

Linux 配置SFTP,配置用户访问权限

本文最终的效果:在Linux下建立sftp-users用户组,在该组下建多个用户,禁止该组所有用户ssh远程登录服务器,但是允许该组所有用户登录sftp,并只能访问自己的目录及子目录中的文件。本文以a...
  • yanzhenjie1003
  • yanzhenjie1003
  • 2017年04月15日 14:06
  • 11532
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自定义用户访问权限
举报原因:
原因补充:

(最多只允许输入30个字)