Example #1
0
        /// <summary>
        /// 添加用户角色。
        /// </summary>
        /// <param name="role">用户角色实例。</param>
        /// <param name="cancellationToken">取消标识。</param>
        /// <returns>返回角色添加结果。</returns>
        public override async Task <IdentityResult> CreateAsync(TRole role, CancellationToken cancellationToken = default)
        {
            cancellationToken.ThrowIfCancellationRequested();
            if (role == null)
            {
                throw new ArgumentNullException(nameof(role));
            }
            role.RoleLevel = await GetMaxRoleLevelAsync(role) + 1;//获取当前角色等级

            // ReSharper disable once SuspiciousTypeConversion.Global
            if (role is IRoleEventHandler <TRole> handler)
            {
                if (await RoleContext.BeginTransactionAsync(async db =>
                {
                    if (!await db.CreateAsync(role, cancellationToken))
                    {
                        return(false);
                    }
                    if (!await handler.OnCreatedAsync(db, cancellationToken))
                    {
                        return(false);
                    }
                    return(true);
                }, cancellationToken: cancellationToken))
                {
                    return(IdentityResult.Success);
                }
            }
            else if (await RoleContext.CreateAsync(role, cancellationToken))
            {
                return(IdentityResult.Success);
            }
            return(IdentityResult.Failed(ErrorDescriber.DefaultError()));
        }
Example #2
0
        /// <summary>
        /// 下移角色。
        /// </summary>
        /// <param name="role">角色实例。</param>
        /// <param name="cancellationToken">取消标识。</param>
        /// <returns>返回移动结果。</returns>
        public virtual async Task <bool> MoveDownAsync(TRole role, CancellationToken cancellationToken = default)
        {
            if (role == null)
            {
                throw new ArgumentNullException(nameof(role));
            }
            // ReSharper disable once SuspiciousTypeConversion.Global
            if (role is IRoleEventHandler <TRole> handler)
            {
                return(await RoleContext.BeginTransactionAsync(async db =>
                {
                    if (!await db.MoveDownAsync(role.Id, x => x.RoleLevel, MoveExpression(role), cancellationToken))
                    {
                        return false;
                    }

                    if (!await handler.OnUpdateAsync(db, cancellationToken))
                    {
                        return false;
                    }

                    return true;
                }, cancellationToken : cancellationToken));
            }
            return(await RoleContext.MoveDownAsync(role.Id, x => x.RoleLevel, MoveExpression(role), cancellationToken));
        }