Devralınan erişimi temizleme
Bu makalede, Microsoft Dataverse'de tablonun art arda yapılandırması değiştiğinde kayıtlar için devralınan erişimin nasıl kaldırılacağı anlatılır.
Belirtiler
Reparent veya Share eylemi için tablo ilişkisinin basamaklı davranışı Art Arda Yok olarak değiştirildikten sonra, kaldırılması gereken ilgili kayıtlara erişiminiz olmaya devam eder.
İlgili kayıtlara erişimi doğrulama
Kullanıcılar kayıtlara beklenmeyen erişime sahip olduklarını bildirebilir. İlgili kayıtlara erişimi doğrulamanın iki yolu vardır: Erişimi Denetle özelliğini veya RetrieveAccessOrigin
iletiyi kullanma.
Erişimi Denetle özelliğini kullanma
Kimlerin bir kayda erişimi olduğunu denetlemek için model temelli uygulamalarda Erişimi Denetle özelliğini kullanın. Yöneticiler, tek tek kullanıcıları veya bir kayda erişimi olan tüm kullanıcıları denetlemek için bu özelliği kullanabilir.
Erişim denetleyicisini kullanırken, kullanıcının erişime sahip olmasının nedenlerinin listesini görürsünüz. Bu nedenlerden bazıları, ilgili kayda erişim nedeniyle paylaşımın verildiğini gösterir. Örneğin:
- İlgili kayda erişimim olduğundan kayıt benimle paylaşıldı.
- Kayıt, üyesi olduğum ekiplerle paylaşıldı çünkü ekibin ilgili kayda erişimi var.
RetrieveAccessOrigin iletisini kullanma
Geliştiriciler, bir kayda erişimi olan kullanıcıları algılamak için iletiyi kullanabilir RetrieveAccessOrigin
. Bu ileti, kullanıcının neden erişime sahip olduğunu açıklayan bir cümle döndürür. Aşağıdaki sonuçlardan herhangi biri, ilgili kaydın paylaşılması nedeniyle erişim verildiğini gösterir:
PrincipalId is owner of a parent entity of object (<record ID>)
PrincipalId is member of team (<team ID>) who is owner of a parent entity of object (<record ID>)
PrincipalId is member of organization (<organization ID>) who is owner of a parent entity of object (<record ID>)
PrincipalId has access to (<parent record ID>) through hierarchy security. (<parent record ID>) is owner of a parent entity of object (<record ID>)
Daha fazla bilgi için bkz. Kullanıcının neden kodla erişime sahip olduğunu belirleme.
Neden
Tablo ilişkisi için basamaklı davranış değiştiğinde Dataverse, kullanıcılara daha önce verilmiş erişim iznini kaldırmak için zaman uyumsuz bir iş başlatır. Ancak bu iş başarısız olabilir ve bu da kullanıcıların erişimi korumasına neden olabilir.
Çözüm
Bu sorunu çözmenin ilk adımı, erişimi kaldırmak için sistem işini yeniden oluşturmaktır. İş başarısız olursa, bir geliştirici belirtilen kayıt kümesine değişikliği uygulamak için iletiyi kullanabilir ResetInheritedAccess
.
Erişimi kaldırmak için sistem işini yeniden oluşturma
Geliştiriciler, zaman uyumsuz bir iş oluşturmayı yeniden denemek için iletiyi kullanabilir CreateAsyncJobToRevokeInheritedAccess
.
Microsoft.Xrm.Sdk.Messages.CreateAsyncJobToRevokeInheritedAccessRequest sınıfını kullanın.
/// <summary>
/// Creates and executes an asynchronous cleanup job to revoke inherited access granted through cascading inheritance.
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <param name="relationshipSchemaName">The schema name of the entity relationship.</param>
public static void CreateAsyncJobToRevokeInheritedAccessExample(IOrganizationService service, string relationshipSchemaName)
{
var request = new Microsoft.Xrm.Sdk.Messages.CreateAsyncJobToRevokeInheritedAccessRequest()
{
RelationshipSchema = relationshipSchemaName
};
service.Execute(request);
}
.NET için SDK ile iletileri kullanma hakkında daha fazla bilgi edinin.
Eylem CreateAsyncJobToRevokeInheritedAccess
adlı RevokeInheritedAccess
yeni bir zaman uyumsuz iş oluşturur. Bu işin başarısını izleyebilirsiniz. Daha fazla bilgi için bkz. Sistem işlerini izleme veya sistem işlerini kodla yönetme.
Devralınan erişimi sıfırlama
Erişimi kaldırmak için sistem işini yeniden oluşturmak başarısız olursa, sistem yöneticisi veya sistem özelleştirici ayrıcalıklarına sahip bir geliştirici eşleşen kayıtların ResetInheritedAccess
bir alt kümesini hedeflemek için iletiyi kullanabilir. Tüm kayıtlara erişimi kaldırmak için bu iletiyi birkaç kez kullanmanız gerekebilir.
/// <summary>
/// Resets the inherited access for the matching records.
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <param name="fetchXml">The fetchxml query.</param>
public static void OutputResetInheritedAccess(IOrganizationService service, string fetchXml)
{
var parameters = new ParameterCollection()
{
{ "FetchXml", fetchXml}
};
var request = new OrganizationRequest()
{
RequestName = "ResetInheritedAccess",
Parameters = parameters
};
var response = service.Execute(request);
Console.WriteLine(response.Results["ResetInheritedAccessResponse"]);
}
.NET için SDK ile iletileri kullanma hakkında daha fazla bilgi edinin.
çok ResetInheritedAccess
fazla eşleşen kayıt olmadığında ileti zaman uyumlu olarak yürütmeye çalışır.
ResetInheritedAccessResponse
Ardından değer ile ExecutionMode : Sync
sona erer. Çok sayıda eşleşen kayıt varsa, işlem daha uzun sürer ve değer ile ExecutionMode : Async
biter. adlı Denormalization_PrincipalObjectAccess_principalobjectaccess:<caller ID>
bir sistem işi oluşturulur ve bu işin başarısını izleyebilirsiniz. Daha fazla bilgi için bkz. Sistem işlerini izleme veya sistem işlerini kodla yönetme.
İleti, ResetInheritedAccess
kayıtları tanımlamak için bir FetchXml sorgusu gerektirir. Bu sorgu aşağıdaki gereksinimleri karşılamalıdır:
-
principalobjectaccess
(POA) tablosunu kullanın. - Yalnızca
principalobjectaccessid
sütunu döndürür. - Hiçbir
link-entity
öğe içermemelidir. Başka bir tabloya birleştirme ekleyemezsiniz. - Yalnızca tablonun sütunlarına göre filtre uygulayın
principalobjectaccess
.
Bu tablo Web API'sinde principalobjectaccess varlık türü olarak kullanılabilir. POA tablosu herhangi bir doğrudan veri değiştirme işlemini desteklemediğinden Dataverse tablosu/varlık başvurusuna dahil değildir. FetchXml sorgusunu oluşturmak için bu tablonun sütunlarını bilmeniz gerekir.
POA tablo sütunları
Yalnızca bu sütunları kullanarak bir FetchXml sorgusu oluşturmanız gerekir.
Mantıksal ad | Tür | Açıklama |
---|---|---|
accessrightsmask |
Tamsayı | Sorumlunun doğrudan sahip olduğu erişim hakları için birleştirilmiş AccessRights sabit listesi üye değerlerini içerir. |
changedon |
Datetime | Sorumlunun kayda erişiminin değiştirildiği son tarih. |
inheritedaccessrightsmask |
Tamsayı | Devralma nedeniyle uygulanan erişim hakları için birleştirilmiş AccessRights sabit listesi üye değerlerini içerir. |
objectid |
Benzersiz Tanımlayıcı | Sorumlunun erişimi olan kaydın kimliği. |
objecttypecode |
Tamsayı | Tabloya karşılık gelen EntityMetadata.ObjectTypeCode değeri. Bu değer farklı ortamlar için aynı olmayabilir. Özel tablolar için, tablonun oluşturulma sırasına göre atanır. Bu değeri almak için tablonun meta verilerini görüntülemeniz gerekebilir. Bunu bulmak için çeşitli topluluk araçları vardır. Microsoft'un bir çözümü: Ortamınızdaki tablo tanımlarına göz atın. |
principalid |
Benzersiz Tanımlayıcı | Erişimi olan kullanıcının veya ekibin kimliği. |
principalobjectaccessid |
Benzersiz Tanımlayıcı | POA tablosunun birincil anahtarı. |
principaltypecode |
Tamsayı | Sorumlunun tür kodu.
SystemUser = 8, Team = 9. |
Aşağıdaki AccessRights sabit listesi üye değerleri ve inheritedaccessrightsmask
sütunları için accessrightsmask
geçerlidir:
Erişim türü | Değer | Açıklama |
---|---|---|
None |
0 | Erişim yok. |
Read |
1 | Kayıt okuma hakkı. |
Write |
2 | Kaydı güncelleştirme hakkı. |
Append |
4 | Belirtilen kaydı başka bir kayda ekleme hakkı. |
AppendTo |
16 | Belirtilen kayda başka bir kayıt ekleme hakkı. |
Create |
32 | Kayıt oluşturma hakkı. |
Delete |
65,536 | Kayıt silme hakkı. |
Share |
262,144 | Kayıt paylaşma hakkı. |
Assign |
524,288 | Belirtilen kaydı başka bir kullanıcıya veya takıma atama hakkı. |
Değerin inheritedaccessrightsmask
genellikle 135.069.719 olduğunu görebilirsiniz. Bu değer, dışındaki Create
tüm erişim türlerini içerir; bu gerekli değildir çünkü bu haklar yalnızca önceden oluşturulmuş kayıtlar için geçerlidir.
FetchXml örnekleri
Bu bölüm, iletiyle birlikte kullanabileceğiniz FetchXml sorgularının ResetInheritedAccess
bazı örneklerini içerir. Daha fazla bilgi için bkz . Sorgu oluşturmak için FetchXML kullanma.
Belirli bir hesap için belirli bir kullanıcıya verilen devralınan erişimi sıfırlama
<fetch>
<entity name="principalobjectaccess">
<attribute name="principalobjectaccessid"/>
<filter type="and">
<condition attribute="principalid" operator="eq" value="9b5f621b-584e-423f-99fd-4620bb00bf1f" />
<condition attribute="objectid" operator="eq" value="B52B7A48-EAFB-ED11-884B-00224809B6C7" />
</filter>
</entity>
</fetch>
Belirtilen nesne türü için tüm alt satırlara verilen devralınan erişimi sıfırla
<fetch>
<entity name="principalobjectaccess">
<attribute name="principalobjectaccessid"/>
<filter type="and">
<condition attribute="objecttypecode" operator="eq" value="10042" />
</filter>
</entity>
</fetch>
Tüm nesne türleri için belirtilen kullanıcıya verilen devralınan erişimi sıfırla
<fetch>
<entity name="principalobjectaccess">
<attribute name="principalobjectaccessid"/>
<filter type="and">
<condition attribute="principalid" operator="eq" value="9b5f621b-584e-423f-99fd-4620bb00bf1f" />
</filter>
</entity>
</fetch>