アップデータークラスのコードは次のとおりです。ベース アセンブリ内のすべてのオブジェクトに対するアクセス許可が作成されます。これを機能させるには、制限された baseobject クラスが必要です。これには、TeamMember (SecuritySystemUser の子孫) である CreatedBy と、プロパティを具体的に制限するかどうかを示す Restricted の 2 つのプロパティを定義する必要があります。制限をオンにすると、オブジェクトを作成したユーザー以外はオブジェクトを非表示にする必要があります。
注: これはアセンブリのみを扱います。BaseImp と Base を含むすべての参照アセンブリに別のループを追加できます。例として、KPI アセンブリに対してこれを行います。
private void CreateTeamRole()
{
SecuritySystemRole Role = ObjectSpace.FindObject<SecuritySystemRole>(new BinaryOperator("Name", "Team"));
if (Role != null)
return;
Role = ObjectSpace.CreateObject<SecuritySystemRole>();
Role.Name = "Team";
Role.CanEditModel = true;
Role.SetTypePermissions<SecuritySystemUser>(SecurityOperations.Read, SecuritySystemModifier.Allow);
Role.SetTypePermissions<SecuritySystemRole>(SecurityOperations.Read, SecuritySystemModifier.Allow);
Role.SetTypePermissions<TeamMember>(SecurityOperations.ReadWriteAccess, SecuritySystemModifier.Allow);
Role.SetTypePermissions<TeamMember>(SecurityOperations.Navigate, SecuritySystemModifier.Allow);
foreach (var item in System.Reflection.Assembly.GetAssembly(typeof(DevExpress.ExpressApp.Kpi.KpiDefinition)).GetTypes())
if (item.IsSubclassOf(typeof(XPBaseObject)))
Role.SetTypePermissions(item, SecurityOperations.FullAccess, SecuritySystemModifier.Allow);
Role.SetTypePermissions<XPWeakReference>(SecurityOperations.FullAccess, SecuritySystemModifier.Allow);
foreach (var item in System.Reflection.Assembly.GetAssembly(typeof(BaseObject)).GetTypes())
{
if (item.IsSubclassOf(typeof(XPBaseObject)) && !item.Equals(typeof(TeamMember)))
{
if (item.IsSubclassOf(typeof(RestrictedBaseObject)))
{
Role.SetTypePermissions(item, "Create;Navigate;Delete", SecuritySystemModifier.Allow);
Role.AddObjectAccessPermission(item, "!Restricted or [CreatedBy.Oid] = CurrentUserId()", SecurityOperations.ReadWriteAccess);
}
else
Role.SetTypePermissions(item, SecurityOperations.FullAccess, SecuritySystemModifier.Allow);
}
}
}