0

我有一个 CompanyUser 和 Product 类
每个用户可以创建 x 数量的产品。我只希望每个用户能够查看彼此的产品,但只能编辑自己的产品。

我创建了一个名为 ProductPeople 的角色,对我分配给 CompanyUsers 的 Product 类具有类型权限(该角色具有所有权限、读写导航等)。
我将在哪里设置只有 userX 可以编辑/删除他自己的产品的标准?

4

2 回答 2

2

这是更新程序类的代码。它将为基础程序集中的所有对象创建权限。您需要一个受限制的基对象类才能工作,它应该定义两个属性,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);
            }
        }
    }
于 2014-01-08T14:13:17.983 回答
0

据我了解您的问题,您仅使用类型权限。为了能够表达你想要的,你必须使用对象权限。对于 SecuritySystemObjectPermissionsObject 类型的对象,您可以指定一个标准,通过该标准您可以表达有关“自有产品”的限制。

于 2013-05-21T13:30:09.577 回答