【问题标题】:How does one allow a user to only be able to edit only his items in XAF如何让用户只能在 XAF 中编辑他的项目
【发布时间】:2013-05-15 23:38:15
【问题描述】:

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

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

【问题讨论】:

    标签: c# permissions devexpress roles xaf


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 你说的很对。我不得不使用 SecuritySystemObjectPermissionsObject。添加了目标类型对象。设置权限(创建、导航等)。最后,我将权限添加到角色。但是,我必须在 updater.cs 文件中的代码中执行此操作,因为当我通过 Web 界面中的角色编辑器执行此操作时,它根本不起作用。奇怪但真实
      猜你喜欢
      • 2016-07-03
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多