MS AzMan(Authorization Manager)心得小记
来源:互联网 发布:手机淘宝6.8.0版本安装 编辑:程序博客网 时间:2024/05/17 09:32
AzMan是在Microsoft提供的一套授权管理的组件,底层支持XML/AD/ADAM/SQLServer(Vista Only)的存储方式,对于在Windows平台部署应用系统来说,不失为一种偷懒的替代解决办法(想完全自己开发基于数据库的授权管理者除外) ,但微软的东西只有微软自己最清楚,一些基本概念和封装开发过程中碰到的一些问题和困扰,和大家来分享一下:
Authorization Manager逻辑结构
Authorization Manager的抽象逻辑结构由四类基本对象构成,分别为用户(Member)、角色(Role)、任务(Task)和操作(Operation):
用户
用户可以是一个有效的Windows系统账号、AD/ADAM中定义的账号,也可以是完全由应用系统管理和分配的第三方账号;一个用户可以赋予多个角色权限;
角色
角色是一组任务和操作的抽象集合,每个角色可以包含一到多个的任务和操作,另外,也可以包含其它角色,形成“角色组”式的灵活再组合;
任务
任务是一组操作的抽象集合,每个任务可以包含一到多个的操作,另外,也可以包含其它任务,构成灵活的任务叠加组合;
操作
操作代表系统中的最小功能单位,不可再拆分,也不能再包含其他操作,每个操作都包含一个应用域内唯一的ID标识;
Authorization Manager组件模型
应用域
代表了一个授权管理的应用范围,对应用域内的对象进行操作都必须先初始化存储打开应用域再进行操作,应用域是授权管理对象的访问入口;
用户
用户可以是一个有效的Windows系统账号、AD/ADAM中定义的账号,也可以是完全由应用系统管理和分配的第三方账号;一个用户可以赋予多个角色权限;
角色分配对象
角色分配对象是管理用户授权信息的载体,每个角色分配对象都记录着分配到对应角色定义对象的所有用户信息,是用户和角色定义两个实体的“分配关系定义”;可以与角色定义对象同名,也可以不同名;
角色定义对象
逻辑上属于角色定义,实体上是一种特殊的Task实现(IsRoleDefinition属性为true的Task对象特例),作用是组织和管理粒度更小的任务和操作;可以与角色分配对象不同名,但默认是一个与角色分配对象同名的定义。
任务
任务是一组操作的抽象集合,每个任务可以包含一到多个的操作,另外,也可以包含其它任务,构成灵活的任务叠加组合;
操作
操作代表系统中的最小功能单位,不可再拆分,也不能再包含其他操作,每个操作都包含一个应用域内唯一的ID标识;
在逻辑图中,角色是一种东西,在组件模型中,角色却是两种东西,如果简单地用OpenRole或CreateRole方法操作角色,可能就是会和AzMan 管理控制台MMC上完全不一样的操作结果了,大家要注意,已走过的弯路。
贴两个方法就说明白了:
public static bool AddRole(IAzApplication application,string roleName, string roleDesc)
{
bool result=false;
IAzTask task=null;
try
{
task = application.CreateTask(roleName, null);//搞笑,定义角色却必须创建Task
task.IsRoleDefinition = 1;//再打这个标记
task.Description=roleDesc;
task.Submit(0, null);//一个MMC中的角色定义生成了
AddRoleAssign(application,roleName,roleDesc);
result=true;
}
catch (Exception e)
{
LogHelper.LogError(LogName+".AddRole",roleName,e);
}
return result;
}
{
bool result=false;
IAzTask task=null;
try
{
task = application.CreateTask(roleName, null);//搞笑,定义角色却必须创建Task
task.IsRoleDefinition = 1;//再打这个标记
task.Description=roleDesc;
task.Submit(0, null);//一个MMC中的角色定义生成了
AddRoleAssign(application,roleName,roleDesc);
result=true;
}
catch (Exception e)
{
LogHelper.LogError(LogName+".AddRole",roleName,e);
}
return result;
}
public static bool AddRoleAssign(IAzApplication application,string roleName, string roleDesc)
{
bool result=false;
IAzRole iazRole=null;
try
{
iazRole=application.CreateRole(roleName, null);//这个创建角色其实是角色分配
iazRole.Description=roleDesc;
iazRole.AddTask(roleName, null);
iazRole.Submit(0,null);
result=true;
}
catch (Exception e)
{
LogHelper.LogError(LogName+".AddRoleAssign", roleName,e);
}
{
bool result=false;
IAzRole iazRole=null;
try
{
iazRole=application.CreateRole(roleName, null);//这个创建角色其实是角色分配
iazRole.Description=roleDesc;
iazRole.AddTask(roleName, null);
iazRole.Submit(0,null);
result=true;
}
catch (Exception e)
{
LogHelper.LogError(LogName+".AddRoleAssign", roleName,e);
}
return result;
}
另外,如果向角色添加一个用户失败,如果不重置 (iazRole.Submit(1,null);可以理解为回滚),会导致后续本应正常提交的用户也失败,这应该算AzMan的一个Bug,因为其他的方法都不需要,大家小心这些坑!
public static bool AddUserToRole(IAzApplication application, string user,string roleName)
{
bool result=false;
IAzRole iazRole=null;
try
{
iazRole = application.OpenRole(roleName, null);
iazRole.AddMember(user, null);
iazRole.Submit(0, null);//提交
result=true;
}
catch (Exception e)
{
try
{
if (iazRole!=null) iazRole.Submit(1,null);//没这个以后调用这个方法全玩完
}
catch{}
LogHelper.LogError(LogName+".AddUserToRole",teller+"/n"+roleName,e);
}
{
bool result=false;
IAzRole iazRole=null;
try
{
iazRole = application.OpenRole(roleName, null);
iazRole.AddMember(user, null);
iazRole.Submit(0, null);//提交
result=true;
}
catch (Exception e)
{
try
{
if (iazRole!=null) iazRole.Submit(1,null);//没这个以后调用这个方法全玩完
}
catch{}
LogHelper.LogError(LogName+".AddUserToRole",teller+"/n"+roleName,e);
}
return result;
}
}
时间紧张,不多说了,有需要的再交流吧
- MS AzMan(Authorization Manager)心得小记
- XP Professional注册Authorization Manager的gac
- MS CRM心得
- ms-chart使用心得
- com初学心得小记
- Authorization
- MS CRM 08/16心得
- [MS Smartphone] Connection Manager Sample Code
- MS SQL 2005 存储过程小记
- MS的TREE控件的心得
- MS系统开发心得(一)
- # MS CRM 08/09/2016心得
- 使用 Authorization Manager 对多层应用程序进行基于角色的访问控制
- System Center Virtual Machine Manager 使用心得
- Microsoft Operations Manager 2005 使用心得
- Cloudera Manager 安装 CDH5.x 心得
- Could not start the MS DTC Transaction Manager
- 小记项目管理心得(1)
- 一个设置任意窗口透明度的命令行Delphi程序
- 让你的Winform应用在运行时可自由拖放控件位置
- .NET的两种反射方式
- C#开发可穿透代理服务器的WinForm应用
- ClickOnce DIY全自动更新下载升级的自我实现
- MS AzMan(Authorization Manager)心得小记
- 上周五的MS一道面试题
- 涅槃的火鸟-Pascal前世今生之二(风生水起-Pascal承接衣钵)
- 一、探索需求--找得到用户的期望
- 涅槃的火鸟-Pascal前世今生之一(开天辟地-Algol新元初创)
- 关于DIV被Flash或表单遮盖的解决方法
- WMware下linux增加一个虚拟的硬盘
- Case Foxmail of:战略联盟还是败走麦城?
- 遥祝台湾友人黄先生