コード例 #1
0
        public async Task <EntityPermissionSet> GetPermissionsForType <T>(IUnitOfWork uofw, T type, IEnumerable <string> roleIDs = null)
        {
            var typeName = typeof(T).FullName;

            if (AppContext.UserID == null)
            {
                return(EntityPermissionSet.ReadOnly(typeName));
            }
            if (roleIDs == null && await _userManager.IsInRoleAsync(AppContext.UserID, Roles.Admin))
            {
                return(EntityPermissionSet.FullAccess(typeName));
            }

            roleIDs = roleIDs ?? await _userManager.GetRolesAsync(AppContext.UserID);

            var accessModifiers = await uofw.GetRepository <AccessLevel>().All()
                                  .Where(x => roleIDs.Contains(x.RoleID) && x.Entity.TypeName == typeName)
                                  .Select(x => new { x.AccessModifier })
                                  .ToListAsync();

            return(new EntityPermissionSet()
            {
                Create = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Create),
                Update = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Update),
                Delete = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Delete),
                Read = accessModifiers.Any(x => x.AccessModifier == AccessModifier.Read),
                EntityType = typeName
            });
        }