Ejemplo n.º 1
0
        public static ConcurrentHashSet <string> GetActualPermissions(this PermissionedObject permissionedObject, bool useInherited = true,
                                                                      UseDependencyType useDependency = UseDependencyType.Before)
        {
            var permissionedObjectManager = IocManager.Instance.Resolve <IPermissionedObjectManager>();

            return(permissionedObjectManager?.GetActualPermissions(permissionedObject.Object, useInherited, useDependency) ?? new ConcurrentHashSet <string>());
        }
        public ConcurrentHashSet <string> GetActualPermissions(string objectName, bool useInherited = true,
                                                               UseDependencyType useDependency      = UseDependencyType.Before)
        {
            var obj = Get(objectName, useInherited, useDependency);

            return(obj?.Permissions ?? new ConcurrentHashSet <string>());
        }
        public virtual async Task <PermissionedObjectDto> GetAsync(string objectName, bool useInherited = true,
                                                                   UseDependencyType useDependency      = UseDependencyType.Before, bool useHidden = false)
        {
            var obj = await _cacheManager.GetPermissionedObjectCache().GetOrDefaultAsync(objectName);

            if (obj == null)
            {
                using var unitOfWork = _unitOfWorkManager.Begin();
                var dbObj = await _permissionedObjectRepository.GetAll().FirstOrDefaultAsync(x => x.Object == objectName);

                if (dbObj != null)
                {
                    obj = _objectMapper.Map <PermissionedObjectDto>(dbObj);
                    _cacheManager.GetPermissionedObjectCache().Set(objectName, obj);
                }
                await unitOfWork.CompleteAsync();
            }

            // Check hidden, dependency and inherited
            if (obj != null)
            {
                obj.ActualPermissions = obj.Access == (int)RefListPermissionedAccess.RequiresPermissions ? obj.Permissions : new ConcurrentHashSet <string>();
                obj.ActualAccess      = obj.Access;

                // skip hidden
                if (!useHidden && obj.Hidden)
                {
                    return(null);
                }

                // get dependency
                var dep = !string.IsNullOrEmpty(obj.Dependency)
                    ? await GetAsync(obj.Dependency, true, useDependency, useHidden)
                    : null;

                // check dependency before
                if (useDependency == UseDependencyType.Before && dep != null && dep.ActualAccess != (int)RefListPermissionedAccess.Inherited)
                {
                    obj.ActualPermissions = dep.ActualPermissions;
                    obj.ActualAccess      = dep.ActualAccess;
                    return(obj);
                }


                // if current object is inherited
                if (useInherited && obj.Inherited && !string.IsNullOrEmpty(obj.Parent))
                {
                    var parent = await GetAsync(obj.Parent, true, useDependency, useHidden);

                    // check parent
                    if (parent != null && parent.ActualAccess != (int)RefListPermissionedAccess.Inherited)
                    {
                        obj.ActualPermissions = parent.ActualPermissions;
                        obj.ActualAccess      = parent.ActualAccess;
                        return(obj);
                    }

                    // check dependency after
                    if (useDependency == UseDependencyType.After && dep != null && dep.ActualAccess != (int)RefListPermissionedAccess.Inherited)
                    {
                        obj.ActualPermissions = dep.ActualPermissions;
                        obj.ActualAccess      = dep.ActualAccess;
                        return(obj);
                    }
                }
            }

            return(obj);
        }