zoukankan      html  css  js  c++  java
  • 在xaf 14 中实现 Tonyyang原文中的action权限

    具体实现过程,主要修改了以下几个地方:

    第一:角色和用户类中需要修改成SecurityStrategy的方式:

    具体代码

    MySecurityRole:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security;
    using System.Text;
    using DevExpress.ExpressApp.Security.Strategy;
    using DevExpress.Xpo;
    using DevExpress.Persistent.Base;
    using DevExpress.Persistent.Validation;
    using System.Collections.ObjectModel;
    using DevExpress.Persistent.Base.Security;
    namespace SecurityDemoTest.Module.BusinessObjects
    {
        [DefaultClassOptions]
        public class MySecurityRole : SecuritySystemRole
        {
            public const string DefaultAdministratorsGroupName = "Administrators";
            //private List<IPermission> _Permissions = new List<IPermission>();
            public MySecurityRole(Session session)
                : base(session)
            {
    
            }
    
            [Association("ActionDatas-MySecurityRoles")]
            public XPCollection<ActionData> ActionPermissions
            {
                get
                {
                    return GetCollection<ActionData>("ActionPermissions");
                }
            }
        }
    }
    

      MySecurityUser:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    //using DevExpress.ExpressApp.Security;
    using System.Drawing;
    using System.Security;
    using DevExpress.ExpressApp.Security.Strategy;
    using DevExpress.Persistent.Validation;
    using DevExpress.Xpo;
    using DevExpress.Persistent.Base;
    using DevExpress.Persistent.Base.General;
    using DevExpress.Persistent.Base.Security;
    using DevExpress.ExpressApp.DC;
    using System.ComponentModel;
    //using WinWebSolution.Module;
    
    
    namespace SecurityDemoTest.Module.BusinessObjects
    {
        [XafDisplayName("User"), Persistent, ImageName("BO_User")]
        public class MySecurityUser : SecuritySystemUser // SecurityUserWithRolesBase
        {
            public MySecurityUser(DevExpress.Xpo.Session session)
                : base(session)   
            {
                //_Permissions = new List<IPermission>();
            }
            
            [Persistent("Color")]
            private int _Color;
            [NonPersistent]
            public Color Color
            {
                get { return Color.FromArgb(_Color); }
                set { SetPropertyValue("Color", ref _Color, value.ToArgb()); }
            }
            public override void AfterConstruction()
            {
                base.AfterConstruction();
                _Color = Color.White.ToArgb();
            }
            private string _Description;
            public string Description
            {
                get
                {
                    return _Description;
                }
                set
                {
                    SetPropertyValue("Description", ref _Description, value);
                }
            }
    
    
        }
    }
    

      第二:需要在ViewController中添加如下代码:

            private static bool IsAllowAccessAction(string actionId)
            {
                MySecurityUser currentUser = SecuritySystem.CurrentUser as MySecurityUser;
                Guard.ArgumentNotNull(currentUser, "CurrentUser");
                Guard.ArgumentNotNullOrEmpty(actionId, "ActionId");
                foreach (MySecurityRole role in currentUser.Roles)
                {
                    foreach (ActionData ap in role.ActionPermissions)
                    {
                        if (ap.ActionId == actionId && ap.Kind == "Custom")
                            return true;
                    }
                }
                return false;
            }
  • 相关阅读:
    MongoDB4.0以下版本,同一台电脑安装2个MongoDB服务
    CMake编译Mysql connector C++
    Winsock I/O方法
    查看mysql版本的四种方法(转)
    WorkBench,DELETE 标准语句失败
    Qt 透明对话框 自定义透明度
    QString 分割字符串时产生乱码的问题
    winsock error 相关
    线程的分离状态与结合状态
    Oracle 语法
  • 原文地址:https://www.cnblogs.com/ddlzq/p/3924565.html
Copyright © 2011-2022 走看看