コード例 #1
0
ファイル: PermissionSetBase.cs プロジェクト: xiongeee/bbsmax
        //======================================================================================

        public Guid[] GetNoPermissionTargetRoleIds(User my, TA2 action)
        {
            int actionIndex = GetActionValue(action);

            PermissionTargetType targetType = Permissions.GetPermissionTargetType(actionIndex);

            return(GetNoPermissionTargetRoleIds(my, targetType));
        }
コード例 #2
0
        public static PermissionTargetType[] s_PermissionTargetTypes = null;//new Dictionary<int, PermissionTargetType>();

        static PermissionCollection()
        {
            #region 读取 s_PermissionTargetTypes

            PermissionTargetType?defaultTargetType = null;

            //读取默认的PermissionTargetType,如果每个枚举没有具体指定PermissionTargetType,那么将用这个值
            if (typeof(TA2).IsDefined(typeof(PermissionTargetAttribute), false))
            {
                PermissionTargetAttribute permissionTargetAttribute = (PermissionTargetAttribute)typeof(TA2).GetCustomAttributes(typeof(PermissionTargetAttribute), false)[0];

                defaultTargetType = permissionTargetAttribute.TargetType;
            }

            //得到所有枚举值

            FieldInfo[] fieldInfosWithTarget = typeof(TA2).GetFields();

            PermissionTargetType[] permissionTargetTypes = new PermissionTargetType[fieldInfosWithTarget.Length];

            int i = 0;
            foreach (FieldInfo fieldInfo in fieldInfosWithTarget)
            {
                if (fieldInfo.IsDefined(typeof(PermissionTargetAttribute), false))
                {
                    PermissionTargetAttribute permissionTargetAttribute = (PermissionTargetAttribute)typeof(TA2).GetCustomAttributes(typeof(PermissionTargetAttribute), false)[0];

                    permissionTargetTypes[i] = permissionTargetAttribute.TargetType;

                    i++;
                }

                else if (fieldInfo.IsDefined(typeof(PermissionItemAttribute), false))
                {
                    if (defaultTargetType != null)
                    {
                        permissionTargetTypes[i] = defaultTargetType.Value;
                    }

                    else
                    {
                        throw new Exception(typeof(TA2).FullName + "或者" + fieldInfo.Name + "没有标记PermissionTarget,这将导致bbsmax无法确定这个权限判断的目标");
                    }

                    i++;
                }
            }

            s_PermissionTargetTypes = permissionTargetTypes;

            #endregion
        }
コード例 #3
0
ファイル: PermissionSetBase.cs プロジェクト: xiongeee/bbsmax
        public Guid[] GetNoPermissionTargetRoleIds(int operatorUserID, PermissionTargetType permissionTargetType)
        {
            User my = UserBO.Instance.GetUser(operatorUserID, GetUserOption.WithAll);

            return(GetNoPermissionTargetRoleIds(my, permissionTargetType));
        }
コード例 #4
0
ファイル: PermissionSetBase.cs プロジェクト: xiongeee/bbsmax
        /// <summary>
        /// 通过调用此方法来得到我到底没有权限管理哪些用户组
        /// TODO : 尚未检查 BeforePermissionCheck
        /// </summary>
        public Guid[] GetNoPermissionTargetRoleIds(User my, PermissionTargetType permissionTargetType)
        {
            RoleCollection allRoles = AllSettings.Current.RoleSettings.Roles;

            //User user = UserBO.Instance.GetUser(operatorUserID);

            if (my == null)
            {
                return(allRoles.GetKeys());
            }


            //如果是创始人,直接返回null
            if (my.IsOwner)
            {
                return(new Guid[0]);
            }

            //管理类权限而我不是管理员
            if (IsManagement && my.IsManager == false)
            {
                return(allRoles.GetKeys());
            }

            PermissionLimit limit;

            switch (permissionTargetType)
            {
            case PermissionTargetType.Content:
                limit = AllSettings.Current.PermissionSettings.ContentPermissionLimit;
                break;

            case PermissionTargetType.User:
                limit = AllSettings.Current.PermissionSettings.UserPermissionLimit;
                break;

            default:
                throw new NotSupportedException("Action with target must defined 'PermissionSetWithTargetType'");
            }


            if (limit.LimitType == PermissionLimitType.Unlimited)
            {
                return(new Guid[0]);
            }

            List <Guid> allowRoleIds = new List <Guid>();

            foreach (UserRole userRole in my.Roles)
            {
                //不是管理员
                if (IsManagement && userRole.Role.IsManager == false)
                {
                    continue;
                }

                RoleCollection allowRoles;

                if (limit.LimitType == PermissionLimitType.RoleLevelLowerMe)
                {
                    allowRoles = AllSettings.Current.RoleSettings.GetRoles(delegate(Role role)
                    {
                        if (role < userRole.Role)
                        {
                            return(true);
                        }
                        return(false);
                    });
                }
                else if (limit.LimitType == PermissionLimitType.RoleLevelLowerOrSameMe)
                {
                    allowRoles = AllSettings.Current.RoleSettings.GetRoles(delegate(Role role)
                    {
                        if (role <= userRole.Role)
                        {
                            return(true);
                        }
                        return(false);
                    });
                }
                else if (limit.LimitType == PermissionLimitType.ExcludeCustomRoles)
                {
                    List <Guid> excludeRoleIds = null;
                    limit.ExcludeRoles.TryGetValue(userRole.RoleID, out excludeRoleIds);

                    if (excludeRoleIds != null && excludeRoleIds.Count != 0)
                    {
                        allowRoles = AllSettings.Current.RoleSettings.GetRoles(delegate(Role role)
                        {
                            if (excludeRoleIds.Contains(role.RoleID))
                            {
                                return(false);
                            }
                            return(true);
                        });
                    }
                    else
                    {
                        allowRoles = AllSettings.Current.RoleSettings.Roles;
                    }
                }
                else
                {
                    throw new NotSupportedException();
                }


                foreach (Role allowRole in allowRoles)
                {
                    if (allowRoleIds.Contains(allowRole.RoleID) == false)
                    {
                        allowRoleIds.Add(allowRole.RoleID);
                    }
                }
            }

            int noPermissionRolesCount = allRoles.Count - allowRoleIds.Count;

            Guid[] noPermissionRoleIds = new Guid[noPermissionRolesCount];

            int i = 0;

            foreach (Role role in allRoles)
            {
                if (allowRoleIds.Contains(role.RoleID) == false)
                {
                    noPermissionRoleIds[i] = role.RoleID;
                    i++;
                }
            }

            return(noPermissionRoleIds);
        }