Вот код для класса обновления. Он создаст разрешения для всех объектов вашей базовой сборки. Для этого вам нужен ограниченный класс baseobject, он должен определить два свойства: CreatedBy, который является TeamMember (потомком SecuritySystemUser) и Restricted, который говорит, что если свойство должно быть специально ограничено. Если вы отметите «Ограниченный» как отмеченный, он должен скрыть объект от всех, кроме пользователя, создавшего его.
Примечание: это касается только сборки. Вы можете добавить еще один цикл для всех ссылочных сборок, включая 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);
}
}
}
Вы совершенно правы. Мне пришлось использовать SecuritySystemObjectPermissionsObject. Добавлен объект целевого типа. Задайте разрешения (Создать, Навигация и т. Д.). Наконец, я добавил разрешение на роль. Тем не менее, я должен был сделать это в коде в файле updater.cs, потому что, когда я это сделал с помощью редактора ролей в веб-интерфейсе, он вообще не работал. Удивительно, но факт – Eminem