当分配某个安全角色给到用户后触发插件添加用户到指定团队或相关事务
1、注册插件步骤 Message:Associate,Entity:none;
2、注册插件步骤 Message:AssignUserRoles:Entity:Role
3、插件代码如下:
- /* file name:Plugins.User.SystemUserRolesAssociate.cs
- * author:lynx lynx.kor@163.com @ 2021/10/27 16:45:13
- * copyright (c) 2021 Copyright@lynxce.com
- * desc:
- * > add description for SystemUserRolesAssociate
- * revision:
- *
- */
-
-
- ///
- /// action:SystemUserRolesAssociate
- ///
Entity:none,Message:Associate - ///
Entity:Role,Message:AssignUserRoles - ///
- public class SystemUserRolesAssociate : IPlugin
- {
- public void Execute(IServiceProvider serviceProvider)
- {
- var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
- if (context.MessageName == "Associate" || context.MessageName == "AssignUserRole")
- {
- LogExt.i($"MessageName:{context.MessageName}");
-
- var target = (EntityReference)context.InputParameters["Target"];
- LogExt.i($"U:{target.LogicalName},{target.Id}{target.Name}");
-
- if (target.LogicalName.ToUpper() != "SYSTEMUSER") return;
-
- var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
- var tracing = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
- var service = factory.CreateOrganizationService(null);
- try
- {
- var userid = target.Id;
-
- var fetchRolesXml = $@"
-
-
-
-
-
-
-
-
-
- ";
- var roles = service.RetrieveMultiple(fetchRolesXml);
- if (roles.Count == 0) return;
-
- var fetchUserTeamXml = $@"
-
-
-
-
-
-
-
-
-
- ";
- var userTeams = service.RetrieveMultiple(fetchUserTeamXml);
-
- CheckUserTeam(service, userid, roles, userTeams, "订单管理员");
-
- }
- catch (Exception ex)
- {
- tracing.Trace($"自动指定团队出错:{ex.Message}", ex.StackTrace);
- LogExt.e("自动指定团队出错", ex);
- }
- }
- }
- ///
- /// 用户团队处理逻辑
- ///
- ///
- ///
- ///
- ///
- ///
- private void CheckUserTeam(IOrganizationService service, Guid userid
- , IList
roles, IList userTeams - , string roleName)
- {
-
- //查出要附加用户的团队
- var teamid = xxx.GetAttributeValue
("teamField"); -
- //判断用户是否被赋予对应角色
- if (roles.Any(x => x.GetAttributeValue<string>("name") == roleName))
- {
- //判断用户是否已在团队中
- if (!userTeams.Any(x => x.Id == teamid.Id))
- {
- //添加用户到团队
- service.AddMembersTeam(teamid.Id, new[] { userid });
- }
- }
- else
- {
- if (userTeams.Any(x => x.Id == teamid.Id))
- {
- //从团队中移除用户
- service.RemoveMembersTeam(teamid.Id, new[] { userid });
- }
- }
- }
公共组件方法
- ///
- /// 添加用户到团队
- ///
- ///
- ///
- ///
- public static void AddMembersTeam(this IOrganizationService service, Guid teamid, Guid[] userids)
- {
- var request = new AddMembersTeamRequest
- {
- TeamId = teamid,
- MemberIds = userids
- };
- service.Execute(request);
- }
-
- ///
- /// 把用户从团队中移除
- ///
- ///
- ///
- ///
- public static void RemoveMembersTeam(this IOrganizationService service, Guid teamid, Guid[] userids)
- {
- var request = new RemoveMembersTeamRequest
- {
- TeamId = teamid,
- MemberIds = userids
- };
- service.Execute(request);
- }