Ejemplo n.º 1
0
        internal void AddRolesForBusinessUnit(IXrmDb db, EntityReference businessUnit)
        {
            AddRoleTemplatesForBusinessUnit(db, businessUnit);

            var allRoles = db.GetUnformattedEntities("role");

            foreach (var sr in SecurityRoles.Values)
            {
                if (!allRoles.Any(x => x.GetAttributeValue <string>("name") == sr.Name && x.GetAttributeValue <EntityReference>("businessunitid").Id == businessUnit.Id))

                {
                    var roleMeta = Metadata.EntityMetadata.GetMetadata("role");
                    var role     = new Entity("role")
                    {
                        Id = Guid.NewGuid()
                    };
                    role[roleMeta.PrimaryIdAttribute] = role.Id;
                    role["businessunitid"]            = businessUnit;
                    role["name"] = sr.Name;
                    if (sr.RoleTemplateId != Guid.Empty)
                    {
                        role["roletemplateid"] = new EntityReference("roletemplate", sr.RoleTemplateId);
                    }
                    role["createdby"]  = Core.AdminUserRef;
                    role["createdon"]  = DateTime.UtcNow.Add(Core.TimeOffset);
                    role["modifiedby"] = Core.AdminUserRef;
                    role["modifiedon"] = DateTime.UtcNow.Add(Core.TimeOffset);
                    db.Add(role);
                    SecurityRoleMapping.Add(role.Id, sr.RoleId);
                }
                else
                {
                    SecurityRoleMapping.Add(allRoles.Single(x => x.GetAttributeValue <string>("name") == sr.Name && x.GetAttributeValue <EntityReference>("businessunitid").Id == businessUnit.Id).Id, sr.RoleId);
                }
            }
        }