我有一个 CompanyUser 和 Product 类
每个用户可以创建 x 数量的产品。我只希望每个用户能够查看彼此的产品,但只能编辑自己的产品。
我创建了一个名为 ProductPeople 的角色,对我分配给 CompanyUsers 的 Product 类具有类型权限(该角色具有所有权限、读写导航等)。
我将在哪里设置只有 userX 可以编辑/删除他自己的产品的标准?
我有一个 CompanyUser 和 Product 类
每个用户可以创建 x 数量的产品。我只希望每个用户能够查看彼此的产品,但只能编辑自己的产品。
我创建了一个名为 ProductPeople 的角色,对我分配给 CompanyUsers 的 Product 类具有类型权限(该角色具有所有权限、读写导航等)。
我将在哪里设置只有 userX 可以编辑/删除他自己的产品的标准?
这是更新程序类的代码。它将为基础程序集中的所有对象创建权限。您需要一个受限制的基对象类才能工作,它应该定义两个属性,CreatedBy 是 TeamMember(SecuritySystemUser 后代),Restricted 表示是否要特别限制属性。如果您现在将 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 类型的对象,您可以指定一个标准,通过该标准您可以表达有关“自有产品”的限制。