博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

转载自:http://www.cnblogs.com/jirigala/archive/2010/07/08/1774015.html

 

# ASP.NET 最常用的通用权限的3个方法例子展示。

在 UserPermission.aspx 的例子如下,原文件的位置如下图:

 

参考代码如下:

 

//------------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 , Jirisoft , Ltd.
//------------------------------------------------------------

using System;
using System.IO;
using System.Data;

namespace DotNet.Web.Permission
{
using DotNet.Service;
using DotNet.Utilities;
using Jirisoft.Permission.Model;
using Jirisoft.Permission.Business;

/// <remarks>
/// UserPermission
/// 用户当前权限的获取例子
///
/// 修改纪录
///
/// 版本:1.0 2010.07.08 JiRiGaLa 写好例子程序方便别人学习。
///
/// 版本:1.0
/// <author>
/// <name>JiRiGaLa</name>
/// <date>2010.07.08</date>
/// </author>
/// </remarks>
public partial class UserPermission : BasePage
{
protected void Page_Load(object sender, EventArgs e)
{
// 当然是用户需要登录,否则哪里能知道,现在是判断谁的权限啊?
this.UserInfo = Utilities.Login("Jirigala_Bao@Hotmail.com", String.Empty);

// 1 判断用户是否有某个操作权限(在服务器上判断)
// 访问职员的身份证列字段的操作权限
string permissionItemCode = "Staff.Column.IDCard.Access";
ServiceManager.Instance.PermissionService.IsAuthorizedByUser(
this.UserInfo, this.UserInfo.Id, permissionItemCode);

// 2 获取用户模块菜单列表
this.GetUserModules();

// 3 获取用户权限列表
this.GetUserPermission();
}

/// <summary>
/// 2 获取用户模块菜单列表
/// </summary>
private void GetUserModules()
{
// 就一行代码,就可以获取当前用户的所有可以访问的模块,然后自己想怎么处理就处理,例如变成树形菜单等等
DataTable dtUserModule = ServiceManager.Instance.PermissionService.GetModuleDTByUser(this.UserInfo, this.UserInfo.Id);
this.grvUserModules.DataSource = dtUserModule;
this.grvUserModules.DataBind();
}

/// <summary>
/// 3 获取用户权限列表
/// </summary>
private void GetUserPermission()
{
// 就一行代码,就可以获取当前用户的所拥有的权限列表
DataTable dtUserPermission = ServiceManager.Instance.PermissionService.GetPermissionDTByUser(this.UserInfo, this.UserInfo.Id);
this.grvUserPermission.DataSource = dtUserPermission;
this.grvUserPermission.DataBind();
}
}
}

 

 

 

一:用户可以访问的模块菜单(用户-菜单,角色-菜单,用户-角色,权限-菜单,菜单本身是否公开属性,菜单的父子归属关系,菜单是否有效)按以上结合最终计算出所能访问的菜单集合,当然对超级管理员进行优化处理,简化权限判断过程,提高程序运行效率
有一种方法是,一次性把用户的所有权限都获得,放在客户端或者Seesion里。
另一种方法时,在服务器上判断,当前用户是否有某个权限。

 

IdParentIdCodeFullNameNavigateUrl
10000003   整体信息化系统 整体信息化系统  
10000005 10000004 FrmRequestAnAccount 申请用户账户  
10000007 10000004 FrmStaffAddressEdit 我的联系方式  
10000008 10000004 FrmStaffAddressAdmin 内部通讯录  
10000015 10000004 Appliction 业务应用  
10000016 10000004 FrmMessageSend 发送消息  
10000017 10000004 FrmMessage 即时通讯  
10000022 10000004 FrmAboutThis 关于本软件  
10000024 10000004 FrmUserChangePassword 修改密码  
10004099 10004141 用户下订单 用户下订单 Modules/Convenience/YongHuDingDan/YongHuDingDanTianJia.aspx
10004100 10004141 用户订单确认 用户订单确认 Modules/Convenience/YongHuDingDan/YongHuDingDanDaiQueRen.aspx
10004101 10004142 订单状态查询 订单配额审核查询 Modules/Convenience/YongHuDingDan/YongHuDingDanPeiEYiQueRen.aspx
10004102 10004140 历史订单 历史订单 Modules/Convenience/YongHuDingDan/YongHuDingDanChaXun.aspx
10004103 10004183 订单到货确认 订单到货确认 Modules/Convenience/YongHuDingDan/YongHuDingDanDaoHuoQueRen.aspx
10004140 10004150 CSa01 订单管理 Modules/Convenience/YongHuDingDan/YongHuDingDanYiQueRen.aspx
10004141 10004140 用户订单 用户订单 Modules/Convenience/YongHuDingDan/YongHuDingDanYiQueRen.aspx
10004142 10004140 订单状态 订单状态 Modules/Convenience/YongHuDingDan/YongHuDingDanPeiHuoYiQueRen.aspx
10004144 10004142 订单结算状态查询 订单结算状态查询 Modules/Convenience/YongHuDingDan/YongHuDingDanJieSuanYiQueRen.aspx
10004145 10004142 订单配货状态查询 订单配货状态查询 Modules/Convenience/YongHuDingDan/YongHuDingDanPeiHuoYiQueRen.aspx
10004148 10004102 订单统计汇总 历史订单查询 Modules/Convenience/YongHuDingDan/YongHuDingDanChaXun.aspx
10004150 10000003 终端功能 终端功能  
10004176 10004141 用户已确认订单 用户已确认订单 Modules/Convenience/YongHuDingDan/YongHuDingDanYiQueRen.aspx
10004183 10004140 订单到货 订单到货 Modules/Convenience/YongHuDingDan/YongHuDingDanDaoHuoQueRen.aspx
10004410 10004141 用户已取消订单 用户已取消订单  
10004429 10000004 FrmCodeBuilder 代码生成器  

 

二:用户所拥有的权限列表(用户-权限,角色-权限,权限本身是否公开属性,权限的父子归属关系,权限是否有效)按以上结合最终计算出所拥有的权限集合

 

IdParentIdCodeFullName
10000259 0 PermissionAdmin 通用权限解决方案
10000560 10000259 A系统权限配置 A系统权限配置
10000564 10000560 ASystem.Admin.Access A系统访问权限

 

 

三:当前用户是否有某个权限的判断(用户本身是否超级管理员?)。

// 1 判断用户是否有某个操作权限(在服务器上判断)
// 访问职员的身份证列字段的操作权限
string permissionItemCode = "Staff.Column.IDCard.Access";
ServiceManager.Instance.PermissionService.IsAuthorizedByUser(
this.UserInfo, this.UserInfo.Id, permissionItemCode);

  

设置asp.net通用权限的界面参考如下:

 

通用权限管理组件使用说明书V3.0.doc